Android:如何在调用另一个方法之前确保AsyncTask被终止?

时间:2013-02-28 14:02:57

标签: android android-asynctask

情况很简单。 我使用AsyncTask从HttpClient中检索String。

现在我需要AsyncTask检索的String来调用该String上的另一个方法,

因此我需要确保AsyncTask在调用其他方法之前已经终止。

我该怎么做?

感谢您的任何建议。

5 个答案:

答案 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;
}