等待异步任务完成其工作

时间:2013-02-12 07:28:21

标签: android

我对编程很新,我有些疑惑。

我有一个AsyncTask我称之为RunInBackGround

我开始这个过程,如:

new RunInBackGround().execute();

但是我希望等到这个调用完成它的执行,然后继续执行其他代码语句。

我该怎么做?

有什么办法吗?

5 个答案:

答案 0 :(得分:116)

  

等待此调用完成其执行

您需要调用AsyncTask.get()方法获取结果并等待doInBackground执行未完成。但如果你没有在Thread 中调用get方法,这将冻结主UI线程。

要将结果返回 UI主题,请启动AsyncTask

String str_result= new RunInBackGround().execute().get();

答案 1 :(得分:34)

虽然最佳情况下,如果您的代码可以并行运行会很好,但是您可能只是使用一个线程,因此您不会阻止UI线程,即使您的应用程序的使用流程必须等待它。

你在这里有两个选择;

  1. 您可以在AsyncTask本身中执行您想要等待的代码。如果它与更新UI(线程)有关,则可以使用onPostExecute方法。完成后台工作后会自动调用此方法。

  2. 如果由于某种原因被迫在Activity / Fragment / Whatever中执行此操作,您也可以自己制作一个自定义侦听器,您可以从AsyncTask广播。通过使用它,你可以在Activity / Fragment / Whatever中有一个回调方法,只有当你想要它时才会被调用:也就是当你的AsyncTask用你必须等待的任何东西完成时。

答案 2 :(得分:15)

AsyncTask添加一个ProgressDialog,例如:

private final ProgressDialog dialog = new ProgressDialog(YourActivity.this);

你可以在onPreExecute()方法中设置消息,如:

this.dialog.setMessage("Processing..."); 
this.dialog.show();

并在onPostExecute(Void result)方法中解除您的ProgressDialog

答案 3 :(得分:12)

AsyncTask有四种方法..

onPreExecute  -- for doing something before calling background task in Async

doInBackground  -- operation/Task to do in Background

onProgressUpdate  -- it is for progress Update

onPostExecute  -- this method calls after asyncTask return from doInBackground.

onPostExecute()

返回后,您可以通过doInBackground()来致电您的工作

onPostExecute是您需要实施的。

答案 4 :(得分:1)

我认为最简单的方法是创建一个接口,以从onpostexecute获取数据并从接口运行Ui:

创建接口:

public interface AsyncResponse {
    void processFinish(String output);
}

然后在asynctask中

@Override
protected void onPostExecute(String data) {
    delegate.processFinish(data);
}

然后参加您的主要活动

@Override
public void processFinish(String data) {
     // do things

}