0

如果任务异步运行,如何从服务中获取结果?

如果在主线程中同步启动一个任务,则没有问题:

Object result = serviceInstanceInActivity.callMethod();

但是如果任务在其他线程中运行,我们就会遇到问题:

void asyncMethodInService() {
    new MyTask().execute();
}

class MyTask extends AsyncTask<Void, Void, Result> {
    // implementation of the others methods

    public void onPostExecute(Result result) {
        // We need to send data to Activity here
    }
}

当然,它是通过 ServiceConnection 工作的。在平时的课堂中,我会使用接口作为回调,但如果我在这里做同样的事情,Activity 实例将通过回调在 Service 中泄漏。

那么,在这种情况下,推荐的数据传输方式是什么?

4

1 回答 1

1

我将使用LocalBroadcastManager广播Intent包含结果的内容,以便任何感兴趣的活动都可以在服务完成其任务时注册并接收广播。

如果数据很复杂并且不适合打包成Intent,您需要有点创意。您可能应该使用 aContentProvider并将内容 URI 放入意图中,然后活动可以使用该意图来查询结果。或者您可以将结果存储在静态单例(或您的应用程序实例)上,并让活动在接收到广播时检索更新的值。这取决于您的要求。

希望有帮助!

于 2013-07-04T00:55:40.590 回答