1. 程式人生 > >AsyncTask並行執行

AsyncTask並行執行

使用AsyncTask時發現一個奇怪的現象,即建立多個任務的時候,他是一個一個按順序執行的,查資料之後發現:

在1.5中初始引入的時候, AsyncTask 執行( AsyncTask.execute() )起來是順序的,當同時執行多個 AsyncTask的時候,他們會按照順序一個一個執行。前面一個執行完才會執行後面一個。這樣當同時執行多個比較耗時的任務的時候 可能不是您期望的結果,具體情況就像是execute的task不會被立即執行,要等待前面的task執行完畢後才可以執行。


在android 1.6(Donut) 到 2.3.2(Gingerbread)中,AsyncTask的執行順序修改為並行執行了。如果同時執行多個任務,則這些任務會並行執行。 當任務訪問同一個資源的時候 會出現併發問題.
而在Android 3.0(Honeycomb)以後的版本中,AsyncTask又修改為了順序執行,並且新添加了一個函式 executeOnExecutor(Executor),如果您需要並行執行,則只需要呼叫該函式,並把引數設定為並行執行即可。

即建立一個單獨的執行緒池(Executors.newCachedThreadPool())。或者最簡單的方法法就是使用executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR),這樣起碼不用等到前面的都結束了再執行了。executeOnExecutor(AsyncTask.SERIAL_EXECUTOR)則與execute()是一樣的。