89

我对编程很陌生,我有一些疑问。

我有一个AsyncTask我称之为RunInBackGround.

我开始这个过程,如:

new RunInBackGround().execute();

但我希望等到此调用完成执行,然后再继续执行其他代码语句。

我怎样才能做到这一点?

有什么办法吗?

4

5 回答 5

134

等到这个调用完成它的执行

您将需要调用AsyncTask.get()方法来获取结果并等待直到doInBackground执行未完成。但是如果您不在 Thread 中调用 get 方法,这将冻结 Main UI 线程

要在UI 线程中返回结果,请以以下方式开始AsyncTask

String str_result= new RunInBackGround().execute().get();
于 2013-02-12T07:35:23.560 回答
38

尽管如果您的代码可以并行运行最好,但您可能只是使用一个线程,因此您不会阻塞 UI 线程,即使您的应用程序的使用流程必须等待它。

您在这里有很多选择;

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

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

于 2013-02-12T07:36:12.447 回答
16

在您AsyncTask添加一个 ProgressDialog,例如:

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

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

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

并在您的onPostExecute(Void result)方法中关闭您的ProgressDialog.

于 2013-02-12T07:36:56.500 回答
16

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 是您需要实现的。

于 2015-02-28T18:57:08.647 回答
1

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

创建一个接口:

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

然后在异步任务中

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

然后在你的主要活动中

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

}
于 2018-07-29T13:17:20.480 回答