2013-05-13 69 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

相關問題