android上的Activity和Service之间的通信方式是什么?
今天我学习了如何通过从 Activity 发送 Intent 并使用 BroadcastRecevier 回复来进行通信。
我还有哪些其他选择?有没有人有关于这个的教程/参考?
这个问题的答案是:
活动与服务通信有多种方式,反之亦然。本节讨论了不同的方法并给出了使用的建议。
5.1。Activity绑定到本地服务如果Service和Activity在同一个进程中启动,Activity可以直接绑定到服务上。这是一种相对简单有效的沟通方式。
5.2. 使用接收器 您还可以使用动态注册的接收器进行通信。例如,您的活动可以动态注册接收器,并且服务会发出相应的事件。
5.3. 不同进程中服务的 AIDL 要绑定到在不同进程中运行的服务,您需要使用进程间通信 (IPC),因为数据需要在不同进程之间发送。为此,您需要创建一个类似于 Java 接口但以 .aidl 文件扩展名结尾的 AIDL 文件,并且只允许扩展其他 AIDL 文件。
如果您的服务应该提供给其他应用程序,则需要这种方法,否则您应该更喜欢本地服务。
5.4. 向服务发送 Intent 数据和 bundle 服务从启动的 Android 组件接收数据并且可以使用这些数据。
5.5. Handler 和 Messenger 如果服务应该与 Activity 进行通信,它可以通过从 Activity 接收的 Intent 数据接收 Messenger 类型的对象。如果 Messenger 绑定到活动中的处理程序,则服务可以将消息类型的对象发送到活动。
Messenger 是可打包的,这意味着它可以传递给另一个进程,您可以使用此对象将消息发送到活动中的处理程序。
Messenger 还提供了 getBinder() 方法,该方法允许将 Messenger 传递给活动。因此,Activity 可以向服务发送消息。
感谢http://www.vogella.com/articles/AndroidServices/article.html