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