作者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