在Android中提供服务绑定结果的最佳方式

时间:2013-07-04 00:05:09

标签: android-service

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

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

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中。

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

1 个答案:

答案 0 :(得分:1)

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

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

希望有所帮助!