Android:在调用另一个方法之前,如何确保异步任务被终止?

Android:在调用另一个方法之前,如何确保异步任务被终止?,android,android-asynctask,Android,Android Asynctask,情况很简单。 我使用AsyncTask从HttpClient检索字符串 现在我需要AsyncTask检索的字符串调用该字符串上的另一个方法 因此,在调用另一个方法之前,我需要确保AsyncTask已经终止 我该怎么做 谢谢您的建议。只需检查是否已被调用使用简单的锁或互斥锁即可。基本上,在异步任务中添加一个变量和一个getter: public boolean locked; public boolean isLocked(){ return locked; } 在AsyncTask的

情况很简单。 我使用AsyncTask从HttpClient检索字符串

现在我需要AsyncTask检索的字符串调用该字符串上的另一个方法

因此,在调用另一个方法之前,我需要确保AsyncTask已经终止

我该怎么做


谢谢您的建议。

只需检查是否已被调用

使用简单的锁或互斥锁即可。基本上,在
异步任务中添加一个变量和一个getter

public boolean locked;

public boolean isLocked(){
    return locked;
}
AsyncTask
onPreExecute
方法中,添加:

locked = true;
locked = false;
onPostExecute
方法中,添加:

locked = true;
locked = false;
然后可以将任何外部方法放入循环中,例如:

MyTask foo = new MyTask();
foo.execute();
while (foo.isLocked())
{
    //wait, or sleep, or whatever
}
//here is where you execute code.

如果您确实需要该值,您甚至可能希望尝试启动一个新线程(而不是异步任务执行),并使用.join方法等待它退出

它通常是不受欢迎的(你不应该以这种方式访问http资源;你可能会有一个没有响应的应用程序的风险),但它与其他建议的解决方案没有明显的区别。

你到底想做什么。。。 请记住,如果主线程 被阻止5秒后,用户将收到提示,询问用户是否要等待更长时间
或者退出应用程序。

我怀疑您实际上并不关心它是否已“终止”。我怀疑你只是关心它是否在做。背景方法已经完成。最简单的答案是,如果调用了onPostExecute或OnCancell,则完成doInBackground。如果需要更细粒度的内容,则必须执行Phil描述的操作:

private volatile boolean done;

//...

public boolean isDone() { return done; }

protected Result doInBackground(Params... params) {
    // ...
    done = true;
    return result;
}

还可以调用需要OnPostExecuteTh中的字符串的函数。这将不起作用,如上所述。您必须检查onCancelled,注意这不是一个互斥锁,它只起作用,因为onPostExecute与execute在同一线程上运行。