2

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

4

2 回答 2

4

将 Activity 连接到服务的方法:

  1. 广播:最简单的方法,BroadcastReciever在每个中实现一个来监听其他人的动作。

  2. Messengers:非常适合多种类型的客户端,服务和客户端都有一个Messenger,服务提供它 Messenger in onBind(),客户端发送一条注册/注销消息,并带有自己replyTo()的消息中的信使。服务节省客户信使。现在两者都可以发送/接收消息。

  3. IBinder:如果您需要完整的远程 IPC。使用 AIDL 为服务定义一个接口,并将实现传递给onBind().

Android在线参考对每个都有解释。

于 2013-02-04T12:47:19.747 回答
-2

伙计们是对的,你真的应该用谷歌搜索答案!

但是,我最近学会了一种将意图发送到服务的巧妙方法。您可以简单地调用startService(myIntent)以向您的服务发送意图。如果服务没有运行,它将被启动。如果服务正在运行,您就有可能对新信息做出反应。

于 2013-02-04T12:44:19.403 回答