等待异步任务完成其工作

问题描述:

我对编程非常陌生,我有些疑惑。等待异步任务完成其工作

我有一个AsyncTask这是我打电话为RunInBackGround

,我开始这个过程中,如:

new RunInBackGround().execute(); 

但我想等到这个电话是完成它的执行,在进行代码的其他语句之前。

我该怎么做?

有没有办法呢?

+0

AsyncTask的意义在于它是异步的,意味着它不与代码的其余部分同步。 – Gjordis 2013-02-12 07:30:41

+2

您可以使用它的onPostExecute()AsyncTask方法在您的类中获取回调。 – DcodeChef 2013-02-12 07:32:59

+4

你并不想等到它完成。你想要知道什么时候结束。 – njzk2 2013-02-12 07:51:18

等待,直到该调用完成其执行

您需要调用AsyncTask.get()方法得到的结果返回并等待,直到doInBackground执行不彻底。但这将冻结主UI线程,如果你没有调用线程内的get方法

要获得导致回UI线程开始AsyncTask为:

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

所以如何等待结果和没有得到主UI线程锁定?! 说代码等待结果但是同时,进度条不断滚动! – 2015-11-10 07:39:26

+2

@MuhammadNaderi:不使用'get'方法使用'AsyncTask'并在AsyncTask中调用'onPostExecute'方法,它可以在主UI线程上提供u结果 – 2015-11-10 07:41:30

+1

确定这是一种解决方法,我已经使用了一段时间了,但有时候我需要等待asynctask的代码,就像'c#'中的'await',而不是主线程锁住当然 – 2015-11-10 07:57:55

优化虽然这将是很好,如果你的代码可以并行运行,也可以是你只是使用线程,这样的情况下即使您的应用程序的使用流程不得不等待它,也不会阻止UI线程。

这里有两个选项:

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

  2. 如果你出于某种原因*在Activity/Fragment/Whatever中执行它,你也可以让自己成为一个自定义的侦听器,从AsyncTask中广播出来。通过使用这个,你可以在你的Activity/Fragment /里面有一个回调方法,不管什么时候你只需要调用它:当你的AsyncTask完成任何你需要等待的时候。

+5

这是一个了不起的答案,应该是可以接受的。另外这里是如何使用AsyncTasks实现这个示例:http://*.com/questions/12575068/how-to-get-the-result-of-onpostexecute-to-main-activity-because-asynctask-is -a – 2015-09-18 15:27:50

在你AsyncTask添加一个ProgressDialog像:

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

您可以在onPreExecute()方法setMessage像:

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

,并在您onPostExecute(Void result)方法解散你的ProgressDialog

+0

感谢您提供这些附加信息。 – AndroidBeginner 2017-01-13 15:00:28

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是您需要实现什么后调用。