等待异步任务完成其工作
我对编程非常陌生,我有些疑惑。等待异步任务完成其工作
我有一个AsyncTask
这是我打电话为RunInBackGround
。
,我开始这个过程中,如:
new RunInBackGround().execute();
但我想等到这个电话是完成它的执行,在进行代码的其他语句之前。
我该怎么做?
有没有办法呢?
等待,直到该调用完成其执行
您需要调用AsyncTask.get()方法得到的结果返回并等待,直到doInBackground
执行不彻底。但这将冻结主UI线程,如果你没有调用线程内的get方法。
要获得导致回UI线程开始AsyncTask
为:
String str_result= new RunInBackGround().execute().get();
所以如何等待结果和没有得到主UI线程锁定?! 说代码等待结果但是同时,进度条不断滚动! – 2015-11-10 07:39:26
@MuhammadNaderi:不使用'get'方法使用'AsyncTask'并在AsyncTask中调用'onPostExecute'方法,它可以在主UI线程上提供u结果 – 2015-11-10 07:41:30
确定这是一种解决方法,我已经使用了一段时间了,但有时候我需要等待asynctask的代码,就像'c#'中的'await',而不是主线程锁住当然 – 2015-11-10 07:57:55
优化虽然这将是很好,如果你的代码可以并行运行,也可以是你只是使用线程,这样的情况下即使您的应用程序的使用流程不得不等待它,也不会阻止UI线程。
这里有两个选项:
您可以在AsyncTask本身中执行您想要等待的代码。如果它与更新UI(线程)有关,则可以使用onPostExecute方法。当您的后台工作完成后,这会自动调用。
如果你出于某种原因*在Activity/Fragment/Whatever中执行它,你也可以让自己成为一个自定义的侦听器,从AsyncTask中广播出来。通过使用这个,你可以在你的Activity/Fragment /里面有一个回调方法,不管什么时候你只需要调用它:当你的AsyncTask完成任何你需要等待的时候。
这是一个了不起的答案,应该是可以接受的。另外这里是如何使用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
。
感谢您提供这些附加信息。 – 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是您需要实现什么后调用。
AsyncTask的意义在于它是异步的,意味着它不与代码的其余部分同步。 – Gjordis 2013-02-12 07:30:41
您可以使用它的onPostExecute()AsyncTask方法在您的类中获取回调。 – DcodeChef 2013-02-12 07:32:59
你并不想等到它完成。你想要知道什么时候结束。 – njzk2 2013-02-12 07:51:18