我很想知道为什么你可以使用Bound Service进行Activity和Service之间的双向交互,当你可以使用在Activity和Service中定义的本地广播和接收器与Started Service进行相同类型的交互时
了解每个实现的优缺点将会很有帮助.
我无法在任何地方找到任何明确的答案.
最佳答案
使用绑定服务更灵活.您可以在服务(使用AIDL)上定义返回即时结果(同步)的方法,这是使用LocalBroadcastManager无法完成的.使用LocalBroadcastManager要求您以完全异步的方式使用服务.这将服务操作的启动与结果的返回(回调)分离,这会使您的代码更复杂,更难理解.异步使用有一些好处,有些地方你应该使用它,但是如果你有一个绑定的服务,你可以准确选择何时使用同步调用以及何时使用异步回调.
此外,使用AIDL可以准确描述服务方法调用的签名.如果你使用startService(Intent),你不能保证调用者会在传递的Intent中提供正确的参数,所以你需要依赖调用者“做正确的事”和/或你需要添加很多额外的论证验证.
不要忘记来自@CommonsWare的评论,关于如果服务在与应用程序的其余部分相同的操作系统进程中运行,LocalBroadcastManager如何工作(这使得它不适合编程系统服务等未在您的操作系统进程中运行的程序).