我正在测试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。
答案 0 :(得分:0)
如果您希望运行多个AsyncTasks
超过5(这是默认的Executor
限制),则需要使用其他Executor
启动它,如下所示:
task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
THREAD_POOL_EXECUTOR允许您执行最多15个并行AsyncTasks,而SERIAL_EXECUTOR仅允许最多5个,按顺序执行。