ActivityB Oncreate() で非同期タスクとして作成しています。そのタスクでは、 doInBackground()で無限の while ループを実行しています。前のアクティビティに移動して、再び activityB に移動しているときに、別の非同期タスクが作成されました。
ループが実行されている間、私の問題は2つの無限になりました。前のアクティビティに移動するときに非同期タスクを停止することはできますか?
ActivityB Oncreate() で非同期タスクとして作成しています。そのタスクでは、 doInBackground()で無限の while ループを実行しています。前のアクティビティに移動して、再び activityB に移動しているときに、別の非同期タスクが作成されました。
ループが実行されている間、私の問題は2つの無限になりました。前のアクティビティに移動するときに非同期タスクを停止することはできますか?
確かに...チェックアウトisCancelled() :
public Void doInBackground( .... ) {
while( !isCancelled() ) {
...endless activity...
}
return null;
}
メソッドはありますが、Cancel()
呼び出しcancel(boolean mayInterruptIfRunning)
ても必ずしもバックグラウンドプロセスの実行が停止するわけではありません。
通常発生するのは、AsyncTaskがonCancelled()を実行し、完了時にonPostExecute()を実行しないことだけです。
ドキュメントを参照してください(「非同期タスクのキャンセル」セクション)
http://developer.android.com/reference/android/os/AsyncTask.html
アプリのデザインを確認し、非同期タスクの実行をキャンセルしようとするのではなく、この状態が発生しないように修正します。