Android 让广播接收器与服务通信以及 activity 与服务通信的最佳方式

Android best way to have a broadcast receiver communicate with a service and an activity communicate with the service

在我的 android 应用程序中,我有一个广播接收器,用于侦听与网络相关的意图 (android.net.conn.CONNECTIVITY_CHANGE)。 每当网络连接发生变化时,广播接收器都会收到意图,并且需要将新的连接状态传递给服务。该服务跟踪设备的连接状态。 接下来我有一个 activity 必须与服务通信以查找设备的连接状态并根据连接状态执行一些操作。 使用服务处理与广播接收器的通信以及接下来 activity 与服务的通信的最佳方式是什么。

有很多方法可以做到这一点,但没有 "best way"。这完全取决于这些组件之间正在进行的其他通信。

Activity 可以在 startService() 上使用 Intent 中的附加功能将数据发送到 Service

Service 可以在 startActivity()

上使用 Intent 中的附加功能将数据发送到 Activity

Service 可以在广播 Intent 中使用附加功能将数据发送到任何组件。其他组件(活动、广播接收器等)可以注册 BroadcastReceiver 来侦听来自 Service.

的数据

Activity 也可以绑定到 Service,这将允许使用方法调用 (AIDL) 在 ActivityService 之间进行双向通信。这些方法调用可以是同步的或异步的。

如果所有组件都 运行 在同一进程中,您可以将状态存储在 static 变量中并以这种方式共享数据。

您需要查看整个应用程序,了解哪些数据需要从一个组件移动到另一个组件,然后选择满足这些要求的方法。