我对编程非常不熟悉,有一些疑问。
我有一个名为RunInBackground
的AsyncTask
,我将其称为。
我通过以下方式启动此进程:
new RunInBackGround().execute();
但是我希望在执行完这个调用之前等待,然后再继续执行代码中的其他语句。
我该怎么做呢?
有什么方法可以做到吗?
我对编程非常不熟悉,有一些疑问。
我有一个名为RunInBackground
的AsyncTask
,我将其称为。
我通过以下方式启动此进程:
new RunInBackGround().execute();
但是我希望在执行完这个调用之前等待,然后再继续执行代码中的其他语句。
我该怎么做呢?
有什么方法可以做到吗?
等待此调用执行完毕
您需要调用AsyncTask.get()方法来获得结果,并等待doInBackground
执行完成。但是,如果您不在线程内调用get方法,则会冻结主UI线程。
要在UI线程中获取结果,请启动AsyncTask
:
String str_result= new RunInBackGround().execute().get();
get
方法的情况下使用AsyncTask
,并且在AsyncTask
中调用onPostExecute
方法,该方法会在主UI线程上提供结果。 - ρяσѕρєя Kc#
中的await
,而不会锁定主线程。 - Muhammad NaderiRunInBackGround().execute();
并使用 onPostExecute
方法获取 AsyncTask
结果即可。 - ρяσѕρєя K虽然最理想的情况是您的代码可以并行运行,但有时候您可能只是使用一个线程,以便不会阻塞UI线程,即使您的应用程序使用流程必须等待它。
在这里,您基本上有两个选择;
您可以在AsyncTask本身中执行您想要等待的代码。如果涉及更新UI(线程), 您可以使用onPostExecute方法。当后台工作完成时,此方法会自动调用。
如果由于某种原因而被迫在Activity/Fragment/其他组件中执行,您也可以创建自定义监听器,从AsyncTask中广播。通过使用这个方法,您可以在Activity/Fragment/其他组件中拥有一个回调函数,只有当您想要的时候才会调用它:即当您的AsyncTask完成了您需要等待的任务。
在你的 AsyncTask
中添加一个 ProgressDialog,例如:
private final ProgressDialog dialog = new ProgressDialog(YourActivity.this);
你可以在onPreExecute()
方法中设置消息,如下所示:
this.dialog.setMessage("Processing...");
this.dialog.show();
在你的onPostExecute(Void result)
方法中关闭你的ProgressDialog
。
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.
在doInBackground()
方法返回后,您可以调用onPostExecute()
方法。
因此您需要实现onPostExecute
方法。
public interface AsyncResponse {
void processFinish(String output);
}
@Override
protected void onPostExecute(String data) {
delegate.processFinish(data);
}
@Override
public void processFinish(String data) {
// do things
}