在Android上的Activity和Service之间进行通信的方法是什么?
今天我学会了如何通过从Activity发送Intent并使用BroadcastRecevier回复来进行通信。
我还有哪些其他选择?有没有人有关于此的教程/参考?
回答这个问题是:
活动与服务进行通信的方式有多种,反之亦然。本节讨论了不同的方式,并给出了使用的建议。
5.1。活动绑定到本地服务 如果在与Activity相同的进程中启动Service,则Activity可以直接绑定到该服务。这是一种相对简单而有效的沟通方式。
5.2。使用接收器 您还可以使用动态注册的接收器进行通信。例如,您的活动可以动态注册接收者,服务会发出相应的事件。
5.3。 AIDL用于不同流程的服务 要绑定到在不同进程中运行的服务,您需要使用进程间通信(IPC),因为需要在不同进程之间发送数据。为此,您需要创建一个类似于Java接口的AIDL文件,但以.aidl文件扩展名结尾,并且只允许扩展其他AIDL文件。
如果您的服务应该提供给其他应用程序,则需要此方法,否则您应该更喜欢本地服务。
5.4。发送Intent数据并捆绑到服务 该服务从起始Android组件接收数据,并可以使用此数据。
5.5。处理程序和信使 如果服务应该回传给活动,它可以通过从活动接收的Intent数据接收Messenger类型的对象。如果Messenger绑定到活动中的Handler,则服务可以将Message类型的对象发送到活动。
Messenger是可分区的,这意味着它可以传递给另一个进程,您可以使用此对象将消息发送到活动中的处理程序。
Messenger还提供了方法getBinder(),它允许将Messenger传递给活动。因此,活动可以将消息发送到服务。
感谢http://www.vogella.com/articles/AndroidServices/article.html
答案 0 :(得分:4)
将活动与服务联系起来的方式:
广播:最简单的方法,在每个广告中实施BroadcastReciever
来聆听他人的行为。
Messengers:非常适合多种类型的客户端,服务和客户端都有Messenger
,服务在onBind()
中提供Messenger,客户端发送带有自己的信使的注册/取消注册消息在replyTo()
的消息中。服务保存客户端信使。现在两者都可以发送/接收消息。
IBinder:如果您需要完整的远程IPC。使用AIDL定义服务接口,并将实现传递给onBind()
中的客户端。
Android online reference有解释。
答案 1 :(得分:-2)
这些家伙是对的,你应该谷歌寻求答案!
但是,我最近学会了一种将意图发送到服务的简洁方法。您只需致电startService(myIntent)
即可向您的服务发送意向。如果服务未运行,则将启动该服务。如果服务正在运行,您可以对新信息做出反应。