1

AsyntTask始まり、onCreate無限にループし、UI要素を更新するがあります。

更新はこの方法で行われます(非同期拡張クラスの簡略化された表現、それを呼び出しましょうasyncExtender().execute()):

doInBackground(){
    while (!isCancelled()) {
        Thread.sleep(2000);
        publishProgress(someValue);
    }
}
protected void onProgressUpdate() {
    super.onProgressUpdate(values);
    // UI update here, e.g. TextView.setText
}

別のアクティビティが開始されます。これをSecondActivityと呼びましょう。SecondActivityは、アクションバーの階層的な戻るボタンを利用して、前のアクティビティ(NavUtils.navigateUpFromSameTask(this)onOptionsItemSelected)に戻ります。

問題は、SecondActivityのアクションバーの戻るボタンをタップすると、最初のアクティビティでAsyncTaskが実行されなくなったように見えることです(UIは2秒ごとに更新されません)。一方、ハードウェアの「戻る」ボタンを使用すると、正常に機能します。AsyncTaskは実行を続けます。

なぜ動作の違いとそれを修正する方法は?

4

1 に答える 1

0

AsyncTasksは同時に開始しないでください。また、長時間、多くても数秒で実行するように設計されていません。ターゲットとするAPIによっては、AsyncTasksが同期的に実行される場合があるため、新しいAsyncTaskは、以前のすべてのAPIが終了したときにのみ実行されます。ドキュメントの抜粋:

http://developer.android.com/reference/android/os/AsyncTask.html

最初に導入されたとき、AsyncTasksは単一のバックグラウンドスレッドでシリアルに実行されていました。DONUT以降、これはスレッドのプールに変更され、複数のタスクを並行して操作できるようになりました。HONEYCOMB以降、並列実行によって引き起こされる一般的なアプリケーションエラーを回避するために、タスクは単一スレッドで実行されます。

于 2012-11-04T21:53:04.510 に答える