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

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

task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);

THREAD_POOL_EXECUTOR允许您执行最多 15 个并行 AsyncTask,而SERIAL_EXECUTOR最多只允许按串行顺序执行 5 个。

于 2013-05-13T14:12:56.480 回答