我已经看到多个解决方案让服务/活动相互通信。但是我无法理解我们应该在哪种情况下使用它们以及为什么。
从我读过的内容(android文档和stackoverflow),这些是主要的方法:
- Bind to the service using bindService()
- Use a messenger(它应该用于IPC,但somebody将其用于相同的进程通信)
- Static instance (singleton) of the Service。这种方法可能会带来错误,如果服务死亡会发生什么?该服务的空引用。第一种方法应该不是更好吗?
- 使用LocalBroadcastManager并注册活动以进行接收。基本上,活动会收听服务发送的广播。 Viceversa,服务在其onStartCommand调度从Activity发送的意图动作(具有自定义动作的显式意图)。对于服务中的调度操作,另一个解决方案可能是服务和隐式意图的意图过滤器(android文档says NO in the notes,即使我声明自定义操作)。有多少人有机会使用与我相同的自定义操作?
- Otto API
- 待定意图as per documentation,其中包含:
醇>
如果服务不提供绑定,则startService()提供的意图是应用程序组件与服务之间唯一的通信方式。但是,如果您希望服务返回结果,则启动服务的客户端可以为广播创建PendingIntent(使用getBroadcast())并将其传递给启动服务的Intent中的服务。然后,该服务可以使用广播来传递结果。
现在我非常困惑。有人可以解释(如果可能的话,有例子)为什么以及在哪种情况下我们应该使用这些方法?
除了列表中的解决方案之外还有其他解决方案吗?
谢谢。