[問題] AsyncTask執行順序問題

看板AndroidDev作者 (別理我)時間11年前 (2013/06/23 10:26), 編輯推噓4(4010)
留言14則, 5人參與, 最新討論串1/1
請問各位大大若使用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

06/23 10:37, , 1F
遞迴
06/23 10:37, 1F

06/23 10:46, , 2F
syncorization?
06/23 10:46, 2F

06/23 11:36, , 3F
讓 task 去呼叫 task?
06/23 11:36, 3F

06/23 11:50, , 4F
如果你是用 api level 11 以上的話
06/23 11:50, 4F

06/23 11:51, , 5F
有個 SERIAL_EXECUTOR 可以在 asyctask.execute 的時候
06/23 11:51, 5F

06/23 11:51, , 6F
選用
06/23 11:51, 6F

06/23 11:52, , 7F
但如果也要兼容 api 11 以下的話
06/23 11:52, 7F

06/23 11:53, , 8F
可能就要把 next asynctask 寫在前一個的 postexecute
06/23 11:53, 8F

06/23 11:53, , 9F
裡面了
06/23 11:53, 9F
我在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)

06/23 21:37, , 10F
喔不好意思我上面講反了 api 11 開始 asynctask 就是
06/23 21:37, 10F

06/23 21:37, , 11F
預設成 serial 執行了,所以你直接 call 三次應該是OK
06/23 21:37, 11F

06/23 21:40, , 12F
可以參考這篇 http://ppt.cc/xN0o
06/23 21:40, 12F

06/23 21:40, , 13F
Order of execution 部分
06/23 21:40, 13F

06/25 00:07, , 14F
如果改用ThreadPoolExecutor+BlockingQueue也會這樣嗎?
06/25 00:07, 14F
文章代碼(AID): #1HnbpAir (AndroidDev)