-2

私は2つの非同期タスクを持っています。そのうちの 1 つは、タイトル バーの一部を毎秒更新することです。他の asynctask (他の画面要素も毎秒更新) を開始した後、最初のタスクは引き続き実行されますが、画面を更新できません。onProgressUpdate() で UI を呼び出します。例外はスローされません。すべてが別々に正常に動作します。同時に発生した場合にのみ問題が発生します。私はなぜなのか理解していない。API 8 (FROYO)を使用しています。

ありがとうございました。

4

1 に答える 1

1

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

本当に並列実行が必要な場合は、 executeOnExecutor(java.util.concurrent.Executor, Object[]) を THREAD_POOL_EXECUTOR で呼び出すことができます

詳細については、以下のリンクをご覧ください。

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

https://github.com/vitkhudenko/test_asynctask . テストして遊ぶ asynctask のサンプル

代わりに、RoboSpice を使用できます。複数のスパイス リクエストを処理できます。https://github.com/octo-online/robospice

編集:以下のリンクを確認してください。トピックに関する適切な説明があります。

複数の AsyncTask を同時に実行する -- 不可能ですか?

void startMyTask(AsyncTask asyncTask) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
    asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);
else
    asyncTask.execute(params);
 }

http://developer.android.com/reference/java/util/concurrent/Executor.html

于 2013-04-05T15:24:49.510 に答える