2011-09-13 27 views
0

我有這樣的方法:如何在Android中的兩個asyncTask調用之後調用語句?

void doStuffs() { 
    new asyncCall1().execute(); 
    new asyncCall2().execute(); 
} 

我怎麼能說這兩個異步調用後的另一種方法已經結束?

+0

你的意思是你要等待兩個任務完成,然後進行一些額外的處理? –

+0

您可以從第二個asyncTask的onPostExecute()方法調用它。 –

回答

2

使用GET方法等待工作在第三異步任務來完成:

(new AsyncTask<Void, Void, Void>() { 

     @Override 
     protected Void doInBackground(Void... params) { 

      asyncCall1.execute((Void)null); 
      asyncCall2.execute((Void)null); 

      try { 
       asyncCall1.get(); 
       asyncCall2.get(); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } catch (ExecutionException e) { 
       e.printStackTrace(); 
      } 

      return (Void)null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      super.onPostExecute(result); 
     } 



    }).execute((Void)null); 
+0

'get()'是否阻塞UI線程,或者只是放回到活套並等待事件? –

+0

我沒有檢查過源碼,但它似乎阻止了調用線程。 –

0

也許傳遞Handler到兩個AsyncTask S的被調用onPostExecute並建立邏輯的處理程序:

Handler asyncTaskHandler = new Handler() { 
    private boolean firstTaskComplete = false; 
    @Override 
    public void handleMessage(Message msg) { 
     synchronized (firstTaskComplete) { 
      if(!firstTaskComplete) { 
       firstTaskComplete = true; 
      } else { 
       // call some other code 
      } 
     } 
    } 
}; 
0

您需要從AsyncTask調用該方法。最簡單的方法是將聲明封裝在您的活動中的公共靜態方法中。否則,您可以將AsyncTask作爲參考傳遞給活動。做到這一點是使用一個處理器

無論哪種方式classiest方式,您的AsyncTask應該去

@Override 
onPostExecute(Result r) 
{ 
    //logic goes here 
} 
相關問題