execute()
とexecuteOnExecuter()
の使用の違いは何ですか?
デフォルトでexecute()
はどのようにタスクを実行しますか? (シリアルまたはパラレルで?)
16を超える新しいSDKには何を使用すべきですか?
並列実行(THREAD_POOL_EXECUTOR
)アプリケーションにとって重要ではない場合や、実行されるAsyncTask
sの数に依存する場合でも、シリアルではなくタスクの場合
.executeは、デフォルトで(シリアルまたはパラレルで)タスクを実行します。
APIレベル11より前:並列。
APIレベル11以降:シリアル。
16以上の新しいSDKに使用する必要があります(executeOnExecuter?)
要件に依存します。デフォルトのエグゼキューターに満足している場合は、execute()
を使用します。そうでない場合は、明示的なエグゼキューターを使用します。
アプリケーションにとって重要ではない場合や、実行される非同期タスクの数に依存する場合でも、シリアルではなくタスクにパラレル実行(THREAD_POOL_EXECUTOR)を使用することをお勧めしますか?
非同期タスクは、比較的短いバックラウンド操作にのみ使用してください。 AsyncTask
ドキュメントの引用:
AsyncTasksは、短い操作(最大で数秒)に使用するのが理想的です。スレッドを長時間実行し続ける必要がある場合は、Java.util.concurrentパッケージによって提供されるさまざまなAPIを使用することを強くお勧めします。エグゼキューター、ThreadPoolExecutor、およびFutureTask。
非同期タスクの実行中、エグゼキュータースレッドは他のタスクを実行できません。エグゼキュータースレッドが1つしかないシリアルエグゼキューターでは、タスクの実行時間が長すぎる場合に問題を検出しやすくなります。このような問題を検出する並列エグゼキューターでは、より多くの同時実行タスクが必要になります。
したがって、本当に並列エグゼキューターに切り替える必要がある場合は、設計を再検討することをお勧めします。
。execute()-この関数は、単一のバックグラウンドスレッドのキューでタスクをスケジュールします。 2つのAsyncTasksを呼び出し、.execute()メソッドを使用してそれらを呼び出す場合、それらはキューで実行されることを意味します(最初に2番目)。
。executeOnExecutor()-両方のAsyncTasksの並列実行が必要な場合、このメソッドを使用してAsyncTaskを実行できます。両方のasyncTasksが同時に実行されることを意味します。
簡単に言うと:.execute()メソッドはasyncTasksの実行用に単一のスレッドを作成し、.executeOnExecuter()メソッドはayncTaskごとに個別のスレッドを作成します。
.executeは、デフォルトでタスクをシリアル順に実行します。
編集済み: executeOnExecutor()を使用する場合は、次のコードを使用できます。
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
else
task.execute();
HONEYCOMB execute()メソッドの前に、AsynkTaskを並行して実行します。