我很想知道为什么在使用活动和服务中定义的本地广播和接收器与开始服务进行相同类型的交互时,你会使用绑定服务进行活动和服务之间的双向交互
了解每种实施的利弊将会有所帮助。
我无法在任何地方找到任何明确答案。
答案 0 :(得分:3)
使用绑定Service
更灵活。您可以在Service
(使用AIDL)上定义返回即时结果(同步)的方法,这是使用LocalBroadcastManager
无法完成的。使用LocalBroadcastManager
要求您以完全异步的方式使用Service
。这将服务操作的启动与结果的返回(回调)分离,这会使您的代码更复杂,更难理解。异步使用有一些好处,有些地方你应该使用它,但如果你有一个绑定Service
,你可以准确选择何时使用同步调用以及何时使用异步回调。
此外,使用AIDL可以准确描述服务方法调用的签名。如果您使用startService(Intent)
,则无法保证调用者将在传递的Intent
中提供正确的参数,因此您需要依赖调用者来做正确的事情"和/或你需要添加许多额外的参数验证。
不要忘记@CommonsWare关于LocalBroadcastManager
仅在Service
与您应用程序的其余部分在同一个操作系统进程中运行时如何工作的注释(这使得它不适合编程)系统服务等未在您的操作系统过程中运行的东西。)
答案 1 :(得分:0)
服务是在后台运行的组件。它可以在不需要与用户交互的情况下执行长时间运行的操作例如,服务可以通过网络检索数据而不停止或阻止用户与应用程序的活动交互,或者用户可以在后台播放音乐而用户是在不同的应用程序中。服务可以是两种类型或状态:
已启动:一旦启动,即使已启动的组件被销毁,服务也可以无限期地在后台运行。当应用程序模块或组件(例如活动)通过调用startService()启动它时,将启动服务。例如,在启动启动画面时使用服务从电话簿中检索联系人。
绑定:绑定服务提供了一个客户端 - 服务器接口,允许组件与服务交互,获取结果,发送请求,甚至跨进程间通信(IPC)进行交互。当app组件通过调用bindService()绑定绑定服务时,绑定绑定服务。