作者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/cn.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