私の Android アプリでは、3 つの異なる非同期タスクを使用しています。2 つのタスクがアクティビティ A で実行され、3 つ目のタスクがアクティビティ B で実行されています。OS バージョン 2.3 のエミュレータでアプリを実行している間、アプリケーションは正常に動作しています。しかし、私は Android 4.0 以降のバージョンで試していますが、最初の Asynctask だけが実行されています。
4.0 以降のバージョンで 3 つの非同期タスクをすべて実行する方法はありますか?
私の Android アプリでは、3 つの異なる非同期タスクを使用しています。2 つのタスクがアクティビティ A で実行され、3 つ目のタスクがアクティビティ B で実行されています。OS バージョン 2.3 のエミュレータでアプリを実行している間、アプリケーションは正常に動作しています。しかし、私は Android 4.0 以降のバージョンで試していますが、最初の Asynctask だけが実行されています。
4.0 以降のバージョンで 3 つの非同期タスクをすべて実行する方法はありますか?
次のことができます。
YourAsyncTaskClassObjectName.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
通常の実行の代わりに:
YourAsyncTaskClassObjectName.execute()
これは、私の単純な非ビジネスアプリで実際に機能しました。これで、2 つの asynctasks の doInBackground メソッドが永久に実行されました (それぞれの内部に while(true) があります)。
警告: これが最良の設計であると言っているわけではありませんが、これは実際に機能しました。
Android 4.0では、AsyncTaskは実行のバックグラウンドスレッドを1つだけ許可します。つまり、一度に1つだけ実行します。これはフローズンヨーグルトでも同じ動作でしたが、ジンジャーブレッドで解除されました。したがって、複数のAsyncTasksを実行できます。したがって、続行するための最良の方法は、AsyncTasksをシリアル化することです。並列化すると、予測できない結果になります。
こんにちは、あなたはあなた自身のエグゼキュータを書かなければなりません。投稿に従ってください
それは正しい振る舞いです。Android 4.0 以降の AsyncTask は、一貫して実行されます。