こんにちは、AsyncTaskでGoogle Playサービス広告IDを取得しようとしています。
私はAndroid AsyncTask APIのドキュメントと多くのstackoverflow Answerを読んでいます。最初に広告IDを取得して、他のプロセスを開始します。 したがって、BackgroundThreadでAds Idを取得し、MainActivityで呼び出すためにAdIdAsyncTaskを作成しました。しかし、私のAsyncTaskステータスは常に実行中です。 何が間違っていますか?AsyncTaskのステータスは常に実行中
MainActivityとAdIdAsyncTask
public class MainActivity extends Activity {
private static final String TAG = "DummyActivity";
private final long MEDIA_ID = 292929L;
private final String ACCESS_KEY = "xxxx-xxxx-xxxx";
private String adId = null;
private AdContext adContext;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AdIdAsyncTask task = new AdIdAsyncTask();
task.execute();
Log.d(TAG, "task.getStatus=" + task.getStatus());
if (task.getStatus().equals(AsyncTask.Status.FINISHED)) {
// do work
}
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(TAG, "onDestroy");
}
public class AdIdAsyncTask extends AsyncTask<Void, Void, Void> {
@Override
protected Void doInBackground(Void... params) {
Log.d(TAG, "doInBackground");
AdvertisingIdClient.Info idInfo = null;
try {
idInfo = AdvertisingIdClient.getAdvertisingIdInfo(getApplicationContext());
} catch (GooglePlayServicesNotAvailableException | GooglePlayServicesRepairableException | IOException e) {
Log.e(TAG, "fetch Google Ads is failed. message=" + e.getMessage());
}
String advertisingId = null;
try {
advertisingId = idInfo.getId();
} catch (NullPointerException e) {
Log.e(TAG, "adId is null. message=" + e.getMessage());
}
adId = advertisingId;
cancel(true);
Log.i(TAG, "adId=" + advertisingId + ", isCancelled=" + isCancelled());
return null;
}
@Override
protected void onCancelled() {
super.onCancelled();
Log.i(TAG, "onCancelled");
}
@Override
protected void onCancelled(Void aVoid) {
super.onCancelled(aVoid);
Log.i(TAG, "onCancelled");
}
}
}
ログイン
D/DummyActivity: task.getStatus=RUNNING
D/DummyActivity: doInBackground
I/DummyActivity: adId=xxxx-xxxx-xxxx, isCancelled=true
I/DummyActivity: onCancelled
I/DummyActivity: onCancelled
SdkVersion
compileSdkVersion 25
minSdkVersion 14
targetSdkVersion 25
を実行しているasynkタスクを停止します_Async_は_asynchronous_を意味します。 'execute()'呼び出しは直ちに戻り、 'OnCreate()'の残りのコードは 'AsyncTask'が別のスレッド上で動作している間は実行を続けます。 –
ですから、広告IDを取得して他のプロセスを実行するためのコードを修正するにはどうすればよいですか? – byrage
なぜonCreate()のtask.getStatus()。equals(AsyncTask.Status.FINISHED) をチェックしていますか? あなたはonCreateでAsyncTaskを開始しましたが、ステータスを即座にチェックしています。それは関係ありません。 – Shaahul