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()是一樣的。

發佈留言