我是Android多线程的新手,我有一个疑问。我有一个AsyncTask实例我叫它BackGroundTask我用
开头BackGroundTask bgTask = new BackGroundTask();
bgTask.execute();
然而,我想等到这个调用完成了它的执行,然后再继续到代码的其他语句,而不阻塞UI线程,允许用户浏览应用程序。
请帮助我,这样我才能实现这个目标。
把你的代码放在AsyncTask的onPostExecute方法中,你可以使用要在工作线程完成后执行。
尝试使用bgTask.execute().get()
,这将等待后台任务完成,然后移动到被调用线程中的下一条指令。(请注意,这将阻塞被调用的线程,直到后台任务完成)
我已经找到了答案我如何从AsyncTasks doInBackground()检索数据?
答案是使用callback,如下所示,从上面的共享链接复制:
唯一的方法是使用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()方法中使用对象。
一个更优雅和可扩展的解决方案是使用接口。有关示例实现,请参阅此库。我刚刚开始,但它有一个你想要的例子。