[问题] 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