我是Android的多线程新手,我有一个疑问。我有一个AsyncTask实例,我将其称为BackGroundTask,我将其作为开始:
BackGroundTask bgTask = new BackGroundTask();
bgTask.execute();
但是我想等到这个调用完成它的执行,然后继续执行其他代码语句而不阻塞UI线程并允许用户浏览应用程序。
请帮助我,以便我能做到这一点。
答案 0 :(得分:0)
将你的代码放在AsyncTask的onPostExecute方法中,你就可以了 希望在完成工作后执行工作线程。
答案 1 :(得分:0)
尝试使用bgTask.execute().get()
这将等待后台任务完成,然后再转到被调用线程中的下一条指令。 (请注意,这将阻止被调用的线程,直到后台任务完成)
答案 2 :(得分:0)
我找到了答案 How do I retrieve the data from AsyncTasks doInBackground()?
答案是使用如下所示的回调,该回调是从共享链接上面复制的:
唯一的方法是使用CallBack。你可以这样做:
new CallServiceTask(this).execute(request, url);
然后在你的CallServiceTask中添加一个本地类变量,并在onPostExecute中对该类中的方法进行分类:
private class CallServiceTask extends AsyncTask<Object, Void, Object[]>
{
RestClient caller;
CallServiceTask(RestClient caller) {
this.caller = caller;
}
protected Object[] doInBackground(Object... params)
{
HttpUriRequest req = (HttpUriRequest) params[0];
String url = (String) params[1];
return executeRequest(req, url);
}
protected onPostExecute(Object result) {
caller.onBackgroundTaskCompleted(result);
}
}
然后在RestClient类的onBackgroundTaskCompleted()方法中直接使用Object。
更优雅和可扩展的解决方案是使用接口。有关示例实现,请参阅此库。我刚刚开始它,但它有一个你想要的例子。