在Android服务和活动之间的通信(Communication between Service a

2019-07-19 05:33发布

什么是一个活动和android上的服务之间的沟通方式?

今天,我学会了如何通过发送从活动的意图及回复使用BroadcastRecevier沟通。

这是我的其他选择? 有没有人有这方面的教程/引用吗?

这个问题的答案是:

有一个活动与服务通信,反之亦然几种方式。 本节兼谈的不同方式,并给出了使用建议。

5.1。 活动结合本地服务,如果服务在同一个进程中活动时间,活动可以直接绑定到该服务。 这是一个相对简单而有效的方式来沟通。

5.2。 使用接收器也可以使用动态注册接收器的通信。 例如您的活动动态注册一个接收器和服务发送相应的事件出局。

5.3。 AIDL在不同的流程服务绑定到运行在不同的过程中,你需要使用进程间通信(IPC)的数据需要在不同进程之间发送服务。 为此,您需要创建一个AIDL文件看起来类似于Java接口,但与.aidl文件扩展名结尾,并只允许扩展其他AIDL文件。

如果您的服务应提供给其他应用程序,则需要此方法,否则你应该更喜欢本地服务。

5.4。 发送意图数据和捆绑到服务的服务从起始的Android组件接收数据,并可以使用该数据。

5.5。 处理程序和Messenger如果服务应该被传送回的活性可以通过其从活动接收意图数据接收类型信使的对象。 如果Messenger绑定到处理程序在活动的服务可以发送消息类型的对象的活性。

信使是parcelable,这意味着它可以被传递到另一个过程中,你可以使用这个对象发送消息给处理程序的活动。

信使还提供了方法getBinder(),它允许对信使传递到活性。 因此,该活动可以将消息发送到服务。

由于http://www.vogella.com/articles/AndroidServices/article.html

Answer 1:

方法来活动连接到服务:

  1. 广播:最简单的方法,实现BroadcastReciever每个倾听别人的行动。

  2. 使者:对多种类型的客户的很好,无论服务和客户端有一个Messenger ,服务提供它信使onBind()客户发送注册/注销消息与自己的信使replyTo()的消息。 服务客户节省使者。 现在,这两个可以发送/收到消息。

  3. 的IBinder:如果您需要完全成熟的远程IPC。 定义与AIDL服务的接口,并在通过实现向客户onBind()

Android的在线参考具有各自的解释。



Answer 2:

这些家伙是正确的,你应该谷歌的答案!

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



文章来源: Communication between Service and Activity on Android