1

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 の実際のデバイスを持っていないため、そこでテストできません。エミュレーターでも同じ制限が適用されます。

興味のある方は、このサンプル プロジェクトをここからダウンロードできます。

4

1 に答える 1

0

AsyncTasks5 (デフォルトの制限) を超えて複数回実行する場合は、次のようExecutorに別の で開始する必要があります。Executor

task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);

THREAD_POOL_EXECUTORを使用すると、最大 15 個の並列 AsyncTask を実行できますが、SERIAL_EXECUTORでは最大 5 個までしかシリアル順に実行できません。

于 2013-05-13T14:12:56.480 に答える