我有這樣的方法:如何在Android中的兩個asyncTask調用之後調用語句?
void doStuffs() {
new asyncCall1().execute();
new asyncCall2().execute();
}
我怎麼能說這兩個異步調用後的另一種方法已經結束?
我有這樣的方法:如何在Android中的兩個asyncTask調用之後調用語句?
void doStuffs() {
new asyncCall1().execute();
new asyncCall2().execute();
}
我怎麼能說這兩個異步調用後的另一種方法已經結束?
使用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);
'get()'是否阻塞UI線程,或者只是放回到活套並等待事件? –
我沒有檢查過源碼,但它似乎阻止了調用線程。 –
也許傳遞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
}
}
}
};
您需要從AsyncTask調用該方法。最簡單的方法是將聲明封裝在您的活動中的公共靜態方法中。否則,您可以將AsyncTask作爲參考傳遞給活動。做到這一點是使用一個處理器
無論哪種方式classiest方式,您的AsyncTask應該去
@Override
onPostExecute(Result r)
{
//logic goes here
}
你的意思是你要等待兩個任務完成,然後進行一些額外的處理? –
您可以從第二個asyncTask的onPostExecute()方法調用它。 –