AsyncTask の詳細をテストしていたところ、複数のタスクを開始すると、タスク 6 から 15 (常に 10 タスク) のステータスが RUNNING になっているが、doInBackground (開始時刻が設定されている場所) に入らないという問題に遭遇しました。次の 100 個のタスクがすぐに開始されます。
(出典: beadsoft.de )
タスクは非常に簡単に開始されます。
int tasksToStart = TASKS_TO_ADD_ON_CLICK;
while (tasksToStart > 0) {
tasksToStart--;
mTask = new MyTask(TASK_RUNNING_TIME);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
mTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
else
mTask.execute();
tvTaskInfo.setText("Task " + mTask.id + " requested.");
}
これにより、タスク 5 が実際に何かを開始する前に、後で開始されたすべてのタスクを終了する必要がある (つまり、実行中のタスクの合計が 5 未満になる) 状況が発生します。
a) タスクを強制的に開始する方法はありますか?
b) 何もしないのに、ステータスが RUNNING になっているのはなぜですか。PENDING であってはなりませんか?
Android 4.x の実際のデバイスを持っていないため、そこでテストできません。エミュレーターでも同じ制限が適用されます。
興味のある方は、このサンプル プロジェクトをここからダウンロードできます。