等待异步任务完成其工作而不阻塞UI线程或主线程



我是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()方法中使用对象。

一个更优雅和可扩展的解决方案是使用接口。有关示例实现,请参阅此库。我刚刚开始,但它有一个你想要的例子。

相关内容

  • 没有找到相关文章

最新更新