Android Activity Service沟通:哪一个是最好的方法?

时间:2015-02-12 18:13:15

标签: android android-intent android-service communication

我已经看到多个解决方案让服务/活动相互通信。但是我无法理解我们应该在哪种情况下使用它们以及为什么。 从我读过的内容(android文档和stackoverflow),这些是主要的方法:

  1. Bind to the service using bindService()
  2. Use a messenger(它应该用于IPC,但somebody将其用于相同的进程通信)
  3. Static instance (singleton) of the Service。这种方法可能会带来错误,如果服务死亡会发生什么?该服务的空引用。第一种方法应该不是更好吗?
  4. 使用LocalBroadcastManager并注册活动以进行接收。基本上,活动会收听服务发送的广播。 Viceversa,服务在其onStartCommand调度从Activity发送的意图动作(具有自定义动作的显式意图)。对于服务中的调度操作,另一个解决方案可能是服务和隐式意图的意图过滤器(android文档says NO in the notes,即使我声明自定义操作)。有多少人有机会使用与我相同的自定义操作?
  5. Otto API
  6. 待定意图as per documentation,其中包含:
  7.   

    如果服务不提供绑定,则startService()提供的意图是应用程序组件与服务之间唯一的通信方式。但是,如果您希望服务返回结果,则启动服务的客户端可以为广播创建PendingIntent(使用getBroadcast())并将其传递给启动服务的Intent中的服务。然后,该服务可以使用广播来传递结果。

    现在我非常困惑。有人可以解释(如果可能的话,有例子)为什么以及在哪种情况下我们应该使用这些方法? 除了列表中的解决方案之外还有其他解决方案吗? 谢谢。

0 个答案:

没有答案