[英]I need to run several AsyncTask in Android but only when before task has been terminated
[英]Android: how to make sure an AsyncTask is terminated before I call another method?
情況很簡單。 我使用AsyncTask從HttpClient中檢索String。
現在我需要AsyncTask檢索的String來調用該String上的另一個方法,
因此我需要確保在調用其他方法之前AsyncTask已終止。
我該怎么做呢?
謝謝你的任何建議。
使用簡單的鎖或互斥鎖。 基本上,在AsyncTask
添加變量和getter:
public boolean locked;
public boolean isLocked(){
return locked;
}
在AsyncTask
的onPreExecute
方法中,添加:
locked = true;
並在onPostExecute
方法中添加:
locked = false;
然后可以將任何外部方法放入循環中,例如:
MyTask foo = new MyTask();
foo.execute();
while (foo.isLocked())
{
//wait, or sleep, or whatever
}
//here is where you execute code.
只需檢查是否已調用onPostExecute()
如果您絕對需要該值,您甚至可能希望嘗試啟動新線程(而不是AsyncTask執行)並使用.join方法等待它退出。
它通常不贊成(你不應該以這種方式訪問http資源;你冒着沒有響應的應用程序的風險),但它與其他建議的解決方案沒有太大的不同。
你想做什么...請記住,如果主線程被阻止了5秒鍾,用戶會得到一個提示,詢問用戶是想等待更長時間還是退出應用程序。
我懷疑你實際上並不關心它是否已“終止”。 我懷疑你只關心它是否已經完成了doInBackground方法。 最簡單的答案是,如果調用了onPostExecute或onCancelled,則doInBackground完成。 如果你需要更多的東西找到粒度,你將不得不像菲爾描述的那樣做:
private volatile boolean done;
//...
public boolean isDone() { return done; }
protected Result doInBackground(Params... params) {
// ...
done = true;
return result;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.