私のアプリケーションでは、Activity の起動時に AsyncTask を使用して、特定の連絡先の着信音を取得します。
正常に動作しますが、AsyncTask が doInBackground メソッドに到達する前にアプリケーションが 2 回停止された場合、Activity が再び開始されたときに AsyncTask が正しく実行されず、onPreExecute() メソッドに到達するだけであることに気付きました。
これが私のコードです:
AsyncTask 自体:
private class SelectRingtoneTask extends AsyncTask<String, Void, Void> {
// can use UI thread here
protected void onPreExecute() {
Log.d("cda", "Into selectRingToneTask - onPreExecute() - " + selectRingtoneFinished);
}
// automatically done on worker thread (separate from UI thread)
protected Void doInBackground(final String... args) {
Log.d("cda", "Into selectRingToneTask - !!!!!!!!!!!!!!!");
getRingTone();
return null;
}
// can use UI thread here
protected void onPostExecute(final Void unused) {
selectRingtoneFinished = true;
Log.d("cda", "Into selectRingToneTask - onPostExecute - " + selectRingtoneFinished);
}
}
起動時に AsyncTask を呼び出す場所:
if(srtt == null){
srtt = new SelectRingtoneTask();
Log.d("cda", "RingTone - " + srtt.getStatus());
}
srtt.execute();
AsyncTask が終了する前にアクティビティを開始してアクティビティを閉じると問題が発生します。これが 1 回発生した場合は問題ないように見えますが、2 回目に発生した後、AsyncTask は onPreExecute() メソッドに到達するだけで完了しません。アプリケーションが強制停止されて再起動されるまで、もう一度。
なぜこれが起こるのか誰にも分かりませんか?