作者valda (valda)
看板AndroidDev
標題[問題] asynctask 加上 CountDownLatch
時間Sun Jul 24 16:36:44 2016
Hi
想請教一個問題
目前有一個需求
需要等待三個asynctask的結果
才能繼續做下一步
goole到有人說可以使用countdownlatch
但我用的時候就一直卡在await
就停住了
不知道我哪裡寫錯了
https://gist.github.com/swy680614/34bdc3c9a9ac1719d6a81eafdbbb7df9
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 125.227.28.35
※ 文章網址: https://webptt.com/m.aspx?n=bbs/AndroidDev/M.1469349408.A.E56.html
1F:→ y3k: AsyncTask的結果放三個變數在那邊 三個Task結束時把結果塞過 07/24 21:00
2F:→ y3k: 去並去check那三個變數是否null 這樣寫應該是最不花腦的 07/24 21:01
3F:→ brian780405: .execute()改成.executeOnExecutor( 07/25 01:00
4F:→ brian780405: AsyncTask.THREAD_POOL_EXECUTOR),試試看? 07/25 01:00
5F:→ ssccg: onPostExecute會在main thread上執行,但是你的main thread 07/25 08:26
6F:→ ssccg: 正在cdl.await(),所以就deadlock 07/25 08:26
7F:→ ssccg: 用CountDownLatch的話countDown要在做事的thread呼叫,不能 07/25 08:28
8F:→ ssccg: 在正在await的thread呼叫啊... 07/25 08:28
9F:→ ssccg: 另外AsyncTask如果用execute而不是用executeOnExecutor的話 07/25 08:28
10F:→ ssccg: 是在AsyncTask.SERIAL_EXECUTOR依序執行,所以其實用最後一 07/25 08:29
11F:→ ssccg: 個task的get()來等就好了 07/25 08:30
12F:→ ssccg: 但是block main thread仍然不是好的作法,如果用AsyncTask 07/25 08:31
13F:→ ssccg: 的設計概念,應該是在onPostExecute自己用一個計數變數去算 07/25 08:32
14F:→ ssccg: 完成了幾個,因為都在main thread所以不用考慮同步問題 07/25 08:32
15F:→ htury: 感覺好像在哪個fb社群看過一樣的問題? 07/25 13:30
16F:→ htury: 同一樓,每個task結束去check三個變數,最後執行自己預設 07/25 13:31
17F:→ htury: 的method去check,都是true的代表時,就可以往下走 07/25 13:40