看板 AndroidDev 關於我們 聯絡資訊
※ 引述《valda (valda)》之銘言: : Hi : 想請教一個問題 : 目前有一個需求 : 需要等待三個asynctask的結果 : 才能繼續做下一步 : goole到有人說可以使用countdownlatch : 但我用的時候就一直卡在await : 就停住了 : 不知道我哪裡寫錯了 : https://gist.github.com/swy680614/34bdc3c9a9ac1719d6a81eafdbbb7df9 簡單寫一下範例 程式碼有點亂 請見諒 定義一個變數 private int taskCount; 對asynctask進行定義 AsyncTask<String, Integer, String> getTask(final int num){ return new AsyncTask<String, Integer, String>() { private int count; @Override protected String doInBackground(String... params) { while(count < params.length) { int rand = (int) (Math.random() * 5); try { Thread.sleep(rand * 10); } catch (InterruptedException e) { e.printStackTrace(); } count++; publishProgress(count); } return null; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); taskCount++; } @Override protected void onCancelled() { super.onCancelled(); taskCount++; } @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); if(num == 1){ mTask1.setProgress(values[0]); } else if(num == 2){ mTask2.setProgress(values[0]); } else if(num == 3){ mTask3.setProgress(values[0]); } } }; } 透過sleep來模擬任務執行的畫面 當每個任務成功或失敗 則加1 先宣告三個任務 String[] strs = new String[100]; for(int i = 0; i < 100; i++){ strs[i] = String.valueOf(i); } getTask(1).executeOnExecutor(mExecutors, strs); getTask(2).executeOnExecutor(mExecutors, strs); getTask(3).executeOnExecutor(mExecutors, strs); 當三個任務都完成以後 就顯示字串 Executors.newSingleThreadExecutor().submit(new Runnable() { @Override public void run() { runOnUiThread(new Runnable() { @Override public void run() { result.setText("任務尚未完成..."); } }); while(taskCount < 3); runOnUiThread(new Runnable() { @Override public void run() { result.setText("全部任務已完成!"); } }); } }); 這樣應該是一個蠻直覺的作法@@ 程式碼 https://github.com/givemepassxd999/asynctask_demo 出來的圖會長這樣 http://tinyurl.com/j52lgos -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.163.25.228 ※ 文章網址: https://www.ptt.cc/bbs/AndroidDev/M.1469447438.A.1EE.html