AsyncTask 비동기식 동기화
프로젝트: 프로젝트를 시작할 때 IFAA를 초기화합니다.
/**
* ifaaDeviceId,
*
* @param typeFingerprint
*/
public static void initIfaaDeviceIdByType(int typeFingerprint) {
long startTime = System.currentTimeMillis();
LogUtils.d(TAG, "initIfaaDeviceIdByType start type:" + typeFingerprint);
if (authenticator == null) {
authenticator = AuthenticatorManager.create(PayKernelApplication.getInstance(), typeFingerprint, appName);
}
// null
if (authenticator == null) {
ifaaDeviceId = "";
isSupportIfaaDeviceId = false;
sendIfaaNetLog(startTime, " authenticator ");
return;
}
if (!authenticator.isSupported()
|| !authenticator.hasEnrolled()) {
ifaaDeviceId = "";
isSupportIfaaDeviceId = false;
sendIfaaNetLog(startTime, " IFAA");
return;
}
String log = "";
executor = (Executor) Executors.newCachedThreadPool();
mTask = new IfaaSdkDeviceIdTask(authenticator);
try {
mTask.executeOnExecutor(executor);
ifaaDeviceId = mTask.get(TIME_OUT, TimeUnit.MILLISECONDS);
if (TextUtils.isEmpty(ifaaDeviceId)) {
isSupportIfaaDeviceId = false;
log = "initIfaaDeviceIdByType ifaaDeviceId " + ifaaDeviceId;
} else {
isSupportIfaaDeviceId = true;
log = "initIfaaDeviceIdByType ifaaDeviceId:" + ifaaDeviceId;
}
} catch (InterruptedException e) {
ifaaDeviceId = "";
isSupportIfaaDeviceId = false;
log = "initIfaaDeviceIdByType InterruptedException";
authenticator.cancel();
} catch (ExecutionException e) {
ifaaDeviceId = "";
isSupportIfaaDeviceId = false;
log = "initIfaaDeviceIdByType ExecutionException";
authenticator.cancel();
} catch (TimeoutException e) {
ifaaDeviceId = "";
isSupportIfaaDeviceId = false;
log = "initIfaaDeviceIdByType ";
authenticator.cancel();
}
LogUtils.d(TAG, log);
}
public class IfaaSdkDeviceIdTask extends AsyncTask {
private IAuthenticator mIAuthenticator;
public IfaaSdkDeviceIdTask(IAuthenticator iAuthenticator) {
this.mIAuthenticator = iAuthenticator;
}
@Override
protected String doInBackground(Void... params) {
String deviceId = null;
if (mIAuthenticator != null) {
// ifaa DeviceId
deviceId = mIAuthenticator.getDeviceId();
}
// DeviceId
return deviceId;
}
@Override
protected void onPostExecute(String result) {
}
}
세부 정보: mTask.get () 방법은 시간 초과 판단 방법입니다. 정해진 시간에 다른 스레드가 완성되지 않은 경우 시간 초과 이상이 발생하지만 원래의 스레드는 계속 실행되기 때문에 시간 초과 처리 중 deviceId를 가져오는 작업을 중단해야 합니다. mTask.get () 에서 얻은 결과는 DoInBackground가 되돌아오는 결과이기 때문에 onPostExecute에서 결과를 다시 처리할 필요가 없습니다. 그렇지 않으면 2차 처리의 논리적 혼란이 발생할 수 있습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.