2013-05-13 72 views
1

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

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)为什么状态正在运行,如果它没有做任何事情。它不应该是PENDING吗?

我没有安卓4.x真实设备,无法在那里测试。在仿真器中也适用相同的限制。

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

+0

http://developer.android.com/reference/android/os/AsyncTask.html。根据执行顺序检查主题 – Raghunandan 2013-05-13 14:08:44

+0

那有什么用?一般来说,这并不是我遇到问题或平行执行的顺序。我有任务5到16没有开始的问题。 – 2013-05-13 17:16:14

+0

对于平行执行,使用执行器http://developer.android.com/reference/java/util/concurrent/Executor.html。不要使用asynctask并行执行 – Raghunandan 2013-05-13 17:30:45

回答

0

如果你想运行多个AsyncTasks超过5(这是默认Executor限制),你需要用不同的Executor启动它,像这样:

task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 

THREAD_POOL_EXECUTOR可用于执行起来到15个并行AsyncTasks,而SERIAL_EXECUTOR只允许最多5个,按顺序。

+0

不,我这样做。同样的问题,我可以同时启动100个任务,但任务5到16不会启动。 – 2013-05-13 17:14:56

+0

你知道,Gunnar,你应该看到[我的问题关于你有这个问题](http://stackoverflow.com/questions/11705285/asynctasks-do-not-get-collected-causing-other-asynctasks-to -不跑)。我从来不需要启动超过15个AsyncTasks,但是THREAD_POOL_EXECUTOR已经为我修复了这个问题,但是我的AT也从未实际完成过,导致其他Asynctasks无法运行。 – tolgap 2013-05-13 18:24:33

相关问题