使用aidl与广播接收器在应用之间发送消息(背景和前台处理)的优缺点是什么?我一直在使用接收器,这是因为具有intent过滤器的订阅模型以及易用性/可扩展性。使用这种方法对抗AIDL有什么缺点吗?
THX 本
答案 0 :(得分:1)
通过意图发送数据时,应注意限制 数据大小为几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 异步通信,请使用“单向”关键字。
复杂度高-AIDL接口将同时请求发送到 服务,它必须处理多线程。
一对一通信
使用基础的Android OS Binder框架
需要编写线程安全代码。
Binder事务缓冲区的固定大小有限,当前 1Mb,该进程中所有正在进行的事务共享。 https://developer.android.com/reference/android/os/TransactionTooLargeException.html”
安全性:AIDL允许开发人员将其接口公开给 其他应用程序。 客户和服务双方均已达成协议 互相交流。
答案 1 :(得分:0)
我认为一次退缩可能是电池寿命,因为接收器的监听不断给电池电量带来压力。 BroadCastReceivers可以有安全漏洞如果您在广播时不强调权限,除非您在本地广播然后您当然可以使用LocalBroadcastManager。
AIDL对我来说似乎更安全,但更难以抽象为一般用途。我喜欢AIDL文件,因为我想在另一个进程中进行许多不同的API调用。它就像一个遥控器。使用Broadcastreciever可能更难直接调用自定义方法来完成工作。
答案 2 :(得分:0)
常用:
缺点:
常用:
并非所有规格都适合,每种方法在其效果更好的地方都有其用途。
例如,在以下情况下使用AIDL更有效:
–需要同时服务多个客户端的服务器
–客户端不仅会向服务器发送请求,还会使用返回的响应。
另一方面,在以下情况下使用广播更有效:
–受试者需要将其有趣的事件通知其观察者(很少发生)。 [与轮询模式不同]。
–一个应用程序需要通知其他应用程序某些东西,并且不使用返回的响应。
两种方法都可以使用相同的方式(自定义android权限)进行保护。该操作仅允许使用相同密钥签名的应用共享通信。