使用aidl与广播接收器在应用程序之间发送消息(用于后台和前台处理)的优缺点是什么?我一直在使用接收器,这得益于带有意图过滤器的订阅模型以及易用性/可扩展性。将这种方法用于 vs AIDL 是否有缺点?
谢谢本
使用aidl与广播接收器在应用程序之间发送消息(用于后台和前台处理)的优缺点是什么?我一直在使用接收器,这得益于带有意图过滤器的订阅模型以及易用性/可扩展性。将这种方法用于 vs AIDL 是否有缺点?
谢谢本
通过 Intent 发送数据时,应小心将数据大小限制为几 KB。发送过多数据会导致系统抛出 TransactionTooLargeException 异常。 https://developer.android.com/guide/components/activities/parcelables-and-bundles
Intent 可以传输高达 1Mb 的数据的说法肯定是错误的,500Kb 更准确。 https://www.neotechsoftware.com/blog/android-intent-size-limit "
它是同步和异步进程间通信。默认情况下,AIDL 通信是同步的。为了使 AIDL 通信异步,使用“oneway”关键字。
复杂性很高- AIDL 接口向必须处理多线程的服务发送同时请求。
一对一沟通
使用底层 Android OS Binder 框架
需要编写线程安全的代码。
Binder 事务缓冲区有一个有限的固定大小,目前为 1Mb,由进程正在进行的所有事务共享。 https://developer.android.com/reference/android/os/TransactionTooLargeException.html "
安全性:AIDL 允许开发人员将他们的接口暴露给其他应用程序。 客户端和服务都同意以便相互通信。
我认为一个缺点可能是电池寿命,因为让接收器不断收听会对电池电量造成压力。如果您在广播时不强调权限,BroadCastReceivers 可能存在安全漏洞,除非您在本地广播,那么您当然可以使用 LocalBroadcastManager。
对我来说,AIDL 似乎更安全,但更难抽象以在小组中普遍使用。当我想在另一个进程中进行许多不同的 API 调用时,我喜欢 AIDL 文件。它就像一个遥控器。使用 Broadcastreciever 可能更难直接调用自定义方法来完成工作。
常见用途:
缺点:
常见用途:
由于并非一刀切,每种方法都有其表现更好的用途。
例如,在以下情况下使用 AIDL 会更有效:
– 需要同时为多个客户端提供服务的服务器
– 客户端不仅会向服务器发送请求,还会消费返回的响应。
另一方面,在以下情况下使用广播更有效:
– 一个主体需要通知他的观察者一个有趣的事件(不经常发生)。[与轮询模式不同]。
– 一个应用程序需要通知另一个应用程序某事并且不使用返回的响应。
这两种方法都可以使用相同的方式来保护,即自定义 android 权限。这仅允许使用相同密钥签名的应用程序共享通信。