情况很简单。 我使用AsyncTask从HttpClient中检索String。
现在我需要AsyncTask检索的String来调用该String上的另一个方法,
因此我需要确保AsyncTask在调用其他方法之前已经终止。
我该怎么做?
感谢您的任何建议。
答案 0 :(得分:2)
使用简单的锁或互斥锁。基本上,在AsyncTask
中添加变量和getter:
public boolean locked;
public boolean isLocked(){
return locked;
}
在AsyncTask
的{{1}}方法中,添加:
onPreExecute
并在locked = true;
方法中添加:
onPostExecute
然后可以将任何外部方法放入循环中,例如:
locked = false;
答案 1 :(得分:1)
只需检查是否已调用onPostExecute()
答案 2 :(得分:1)
如果你绝对需要这个值,你甚至可能想尝试启动一个新线程(而不是执行AsyncTask)并使用.join方法等待它退出。
通常不赞成(你不应该以这种方式访问http资源;你冒着没有响应的应用程序的风险)但它与其他建议的解决方案没有太大的不同。
答案 3 :(得分:1)
你想做什么...... 请记住主线程 被阻止5秒钟,用户会询问用户是否要等待更长时间 或退出申请。
答案 4 :(得分:1)
我怀疑你实际上并不关心它是否已“终止”。我怀疑你只关心它是否已经完成了doInBackground方法。最简单的答案是,如果调用了onPostExecute或onCancelled,则doInBackground完成。如果你需要更多的东西找到粒度,你将不得不做像Phil描述的那样:
private volatile boolean done;
//...
public boolean isDone() { return done; }
protected Result doInBackground(Params... params) {
// ...
done = true;
return result;
}