AsyncTask:任务6到15无法启动(但正在运行)

时间:2013-05-13 14:04:07

标签: android android-asynctask

我正在测试AsyncTask的详细信息,并偶然发现当我启动多个任务时,任务6到15(总是10个任务)处于RUNNING状态,但是没有进入doInBackground(设置了开始时间)。接下来的100个任务立即开始。

Task Example http://beadsoft.de/android/tasknotrunning.png

任务开始非常简单:

        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真实设备,无法在那里测试。在仿真器中,同样的限制适用。

任何有兴趣的人都可以下载此示例项目here

1 个答案:

答案 0 :(得分:0)

如果您希望运行多个AsyncTasks超过5(这是默认的Executor限制),则需要使用其他Executor启动它,如下所示:

task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);

THREAD_POOL_EXECUTOR允许您执行最多15个并行AsyncTasks,而SERIAL_EXECUTOR仅允许最多5个,按顺序执行。