如果任务以异步方式运行,如何从服务获取结果?
如果在主线程中同步启动任务,则没有问题:
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中。
那么,在这种情况下,推荐的数据传输方式是什么?
答案 0 :(得分:1)
我会使用LocalBroadcastManager广播包含结果的Intent
,这样任何感兴趣的活动都可以在服务完成任务时注册并接收广播。
如果数据很复杂且无法打包到Intent
,您需要有点创意。您应该使用ContentProvider
并将内容URI放入intent中,然后活动可以使用它来查询结果。或者您可以将结果存储在静态单例(或应用程序实例)上,并让活动在接收广播时检索更新的值。这取决于您的要求。
希望有所帮助!