[問題] asynctask 加上 CountDownLatch

作者: valda (valda)   2016-07-24 16:36:44
Hi
想請教一個問題
目前有一個需求
需要等待三個asynctask的結果
才能繼續做下一步
goole到有人說可以使用countdownlatch
但我用的時候就一直卡在await
就停住了
不知道我哪裡寫錯了
https://gist.github.com/swy680614/34bdc3c9a9ac1719d6a81eafdbbb7df9
作者: y3k (激流を制するは静水)   2016-07-24 21:00:00
AsyncTask的結果放三個變數在那邊 三個Task結束時把結果塞過去並去check那三個變數是否null 這樣寫應該是最不花腦的
作者: brian780405 (pohan)   2016-07-25 01:00:00
.execute()改成.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR),試試看?
作者: ssccg (23)   2016-07-25 08:26:00
onPostExecute會在main thread上執行,但是你的main thread正在cdl.await(),所以就deadlock用CountDownLatch的話countDown要在做事的thread呼叫,不能在正在await的thread呼叫啊...另外AsyncTask如果用execute而不是用executeOnExecutor的話是在AsyncTask.SERIAL_EXECUTOR依序執行,所以其實用最後一個task的get()來等就好了但是block main thread仍然不是好的作法,如果用AsyncTask的設計概念,應該是在onPostExecute自己用一個計數變數去算完成了幾個,因為都在main thread所以不用考慮同步問題
作者: htury (冰點)   2016-07-25 13:30:00
感覺好像在哪個fb社群看過一樣的問題?同一樓,每個task結束去check三個變數,最後執行自己預設的method去check,都是true的代表時,就可以往下走

Links booklink

Contact Us: admin [ a t ] ucptt.com