[問題] asynctask 加上 CountDownLatch

看板AndroidDev作者 (valda)時間9年前 (2016/07/24 16:36), 編輯推噓0(0017)
留言17則, 4人參與, 最新討論串1/2 (看更多)
Hi 想請教一個問題 目前有一個需求 需要等待三個asynctask的結果 才能繼續做下一步 goole到有人說可以使用countdownlatch 但我用的時候就一直卡在await 就停住了 不知道我哪裡寫錯了 https://gist.github.com/swy680614/34bdc3c9a9ac1719d6a81eafdbbb7df9 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.227.28.35 ※ 文章網址: https://www.ptt.cc/bbs/AndroidDev/M.1469349408.A.E56.html

07/24 21:00, , 1F
AsyncTask的結果放三個變數在那邊 三個Task結束時把結果塞過
07/24 21:00, 1F

07/24 21:01, , 2F
去並去check那三個變數是否null 這樣寫應該是最不花腦的
07/24 21:01, 2F

07/25 01:00, , 3F
.execute()改成.executeOnExecutor(
07/25 01:00, 3F

07/25 01:00, , 4F
AsyncTask.THREAD_POOL_EXECUTOR),試試看?
07/25 01:00, 4F

07/25 08:26, , 5F
onPostExecute會在main thread上執行,但是你的main thread
07/25 08:26, 5F

07/25 08:26, , 6F
正在cdl.await(),所以就deadlock
07/25 08:26, 6F

07/25 08:28, , 7F
用CountDownLatch的話countDown要在做事的thread呼叫,不能
07/25 08:28, 7F

07/25 08:28, , 8F
在正在await的thread呼叫啊...
07/25 08:28, 8F

07/25 08:28, , 9F
另外AsyncTask如果用execute而不是用executeOnExecutor的話
07/25 08:28, 9F

07/25 08:29, , 10F
是在AsyncTask.SERIAL_EXECUTOR依序執行,所以其實用最後一
07/25 08:29, 10F

07/25 08:30, , 11F
個task的get()來等就好了
07/25 08:30, 11F

07/25 08:31, , 12F
但是block main thread仍然不是好的作法,如果用AsyncTask
07/25 08:31, 12F

07/25 08:32, , 13F
的設計概念,應該是在onPostExecute自己用一個計數變數去算
07/25 08:32, 13F

07/25 08:32, , 14F
完成了幾個,因為都在main thread所以不用考慮同步問題
07/25 08:32, 14F

07/25 13:30, , 15F
感覺好像在哪個fb社群看過一樣的問題?
07/25 13:30, 15F

07/25 13:31, , 16F
同一樓,每個task結束去check三個變數,最後執行自己預設
07/25 13:31, 16F

07/25 13:40, , 17F
的method去check,都是true的代表時,就可以往下走
07/25 13:40, 17F
文章代碼(AID): #1Nb7uWvM (AndroidDev)
文章代碼(AID): #1Nb7uWvM (AndroidDev)