在我的应用程序中,我需要定期更新位置,检查Activity中的设置,然后使用LocationServices.FusedLocationApi在前台服务中请求该位置。 如何将LocationRequest对象从活动传递给服务?
Edit1 :服务从活动开始并绑定。但我无法理解如何传递该对象。
已解决:我想我已经解决了。我已经正确实现了绑定,然后我找到了这个答案:[1] How to send an object from one Android Activity to another using Intents? 我在服务中获得Parceable时犯了一个noob错误,导致了NullPointer,但我已经解决了。所以我想要的解决方案是: 使用Parceable (并正确实施;))
注意阅读此Shoaib评论:
Google建议不要使用intent将任何额外参数传递给服务,但可能无法在服务端看到,因为多个组件可以绑定到服务,并且不会始终调用onBind()。
答案 0 :(得分:0)
您将能够理解如何绑定和与服务通信(也涉及传递对象)。
针对您的编辑问题扩展答案:
当客户端(您的活动)使用onBind()
方法绑定时,系统会调用您的服务bindService()
方法返回 IBinder 。使用从onBind()返回的 IBinder 实例,调用者(您的活动)可以访问该服务的公共方法。您可以使用一个公共方法来向其发送参数/对象。
您可以进一步参考Google文档Here。
答案 1 :(得分:0)
其中一个解决方案是EventBus库。 你可以从任何地方广播一个对象,并在你想要的任何线程上订阅该对象。 您可以在绑定此行后注册并订阅该事件:
EventBus.getDefault().register(this);
例如在onStartCommand。
和onDestroy中的取消注册(取消订阅)
EventBus.getDefault().unregister(this);