我读了一些类似的问题(例如在这个链接上),但我问的问题有点不同。实际上,在我的情况下,该服务是由该startService方法手动启动的,因此无法使用该bindService方法启动它。
- 假设我们有一个包含
MainService服务和MainServiceActivity活动的包。在文件“AndroidManifest.xml”中,这个活动被声明为 actionMAIN和 categoryLAUNCHER。该活动用于通过 配置服务SharedPreferences并通过调用startService方法启动服务。换句话说,通常用户启动MainServiceActivity并配置/启动MainService. - 现在考虑另一个活动(我们称之为
SecondActivity),它是另一个包的一部分。根据配置,服务使用startActivity方法启动此活动,因此此其他活动在与MainService. 一旦活动运行,它应该通知服务。 - 此时,在
MainService和之间开始通信请求/回复SecondActivity:服务发送请求,活动发送回复。
通过消息传递的通信可能适合,但它MainService是通过startService方法启动的,因此bindService想要绑定到服务的活动不能调用该方法。
然后我有了一个使用附加服务的想法(我们称之为它UtilityService),它是同一个包的一部分MainService:UtilityService可以使用该bindService方法启动。作为结果:
- 一旦
MainService运行,它可能会执行绑定到UtilityService; - 当
MainService启动一个外部活动(例如上面的SecondActivity)时,这个活动绑定到UtilityService.
通过这种方式,theMainService和 theSecondActivity都连接到了UtilityService,后者充当了通信的中介。
这个想法有替代方案吗?