看板 AndroidDev 關於我們 聯絡資訊
請問各位大大若使用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
motors55:遞迴 06/23 10:37
asadman1523:syncorization? 06/23 10:46
kusoayan:讓 task 去呼叫 task? 06/23 11:36
namejoshua:如果你是用 api level 11 以上的話 06/23 11:50
namejoshua:有個 SERIAL_EXECUTOR 可以在 asyctask.execute 的時候 06/23 11:51
namejoshua:選用 06/23 11:51
namejoshua:但如果也要兼容 api 11 以下的話 06/23 11:52
namejoshua:可能就要把 next asynctask 寫在前一個的 postexecute 06/23 11:53
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)
namejoshua:喔不好意思我上面講反了 api 11 開始 asynctask 就是 06/23 21:37
namejoshua:預設成 serial 執行了,所以你直接 call 三次應該是OK 06/23 21:37
namejoshua:可以參考這篇 http://ppt.cc/xN0o 06/23 21:40
namejoshua:Order of execution 部分 06/23 21:40
ajujgrua:如果改用ThreadPoolExecutor+BlockingQueue也會這樣嗎? 06/25 00:07