作者sweet00914 (别理我)
看板AndroidDev
标题[问题] AsyncTask执行顺序问题
时间Sun Jun 23 10:26:15 2013
请问各位大大若使用AsyncTask去执行抓取网页资料,
该何控制执行顺序?
example:
抓取网页资料1 -> update UI A -> 抓取网页资料2 -> updateUI B ->
抓取网页资料3 -> updateUI C (依序)
目前使用for loop去执行同一个function asyncTask的话,时常update UI A还没有完成
asyncTask已经去执行抓取网页资料2了。
请问各位大大该如何去控制执行顺序呢?谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 122.118.28.124
1F:推 motors55:递回 06/23 10:37
2F:→ asadman1523:syncorization? 06/23 10:46
3F:推 kusoayan:让 task 去呼叫 task? 06/23 11:36
4F:推 namejoshua:如果你是用 api level 11 以上的话 06/23 11:50
5F:→ namejoshua:有个 SERIAL_EXECUTOR 可以在 asyctask.execute 的时候 06/23 11:51
6F:→ namejoshua:选用 06/23 11:51
7F:→ namejoshua:但如果也要兼容 api 11 以下的话 06/23 11:52
8F:→ namejoshua:可能就要把 next asynctask 写在前一个的 postexecute 06/23 11:53
9F:→ namejoshua:里面了 06/23 11:53
我在api 11以上执行ASYNCTASK
我的写法是
asyncetask1.exceute();
asyncetask1.exceute();
asyncetask1.exceute();
我查看我的log
06-23 07:47:47.901: I/0.0(637): httpUrl=xxxx
06-23 07:47:48.261: I/0.0(637): ===========paramter.i_queue=0
06-23 07:47:49.572: I/0.0(637): 结束非同步执行
06-23 07:47:54.002: I/0.0(637): httpUrl=xxxx
06-23 07:47:54.122: I/0.0(637): ===========paramter.i_queue=1
06-23 07:47:54.331: I/0.0(637): 结束非同步执行
06-23 07:47:54.624: I/0.0(637): httpUrl=xxxx
06-23 07:47:54.901: I/0.0(637): ===========paramter.i_queue=2
06-23 07:47:55.411: I/0.0(637): 结束非同步执行
请问这样子算是有依序性吗?还是会依找网路等其他因素所影响呢?
※ 编辑: sweet00914 来自: 122.118.31.148 (06/23 15:53)
10F:推 namejoshua:喔不好意思我上面讲反了 api 11 开始 asynctask 就是 06/23 21:37
11F:→ namejoshua:预设成 serial 执行了,所以你直接 call 三次应该是OK 06/23 21:37
13F:→ namejoshua:Order of execution 部分 06/23 21:40
14F:→ ajujgrua:如果改用ThreadPoolExecutor+BlockingQueue也会这样吗? 06/25 00:07