什么是使用AIDL VS广播接收机对应用程序之间发送消息(背景和前景处理)的利弊? 我一直在使用的接收器,这是很好由于订阅模式与意图过滤器,以及易用性/可扩展性。 是否有缺点,使用这种方法来VS AIDL?
THX奔
什么是使用AIDL VS广播接收机对应用程序之间发送消息(背景和前景处理)的利弊? 我一直在使用的接收器,这是很好由于订阅模式与意图过滤器,以及易用性/可扩展性。 是否有缺点,使用这种方法来VS AIDL?
THX奔
当通过一个意图发送数据时,你应该小心的数据大小限制为几KB。 发送过多的数据会导致系统抛出一个异常TransactionTooLargeException。 https://developer.android.com/guide/components/activities/parcelables-and-bundles
该意图可传输高达1MB的价值数据的语句是肯定不对的,500KB更准确。 https://www.neotechsoftware.com/blog/android-intent-size-limit “
它是同步和异步进程间通信。 默认情况下,AIDL通信是同步的。 为了使AIDL通信异步,使用“单向”的关键字。
复杂度高 - AIDL接口发送到服务,必须处理多线程同时请求。
一对一沟通
使用底层Android操作系统的活页夹框架
需要编写线程安全的代码。
活页夹的事务缓冲器具有有限的固定大小,目前的1Mb,其通过所有交易在该过程进展共享。 https://developer.android.com/reference/android/os/TransactionTooLargeException.html “
安全性:AIDL是允许开发人员暴露其接口,其他应用程序。 客户端和服务,才能相互沟通商定 。
我认为,一个退可能是电池寿命,具有接收器监听不断投入紧张的电池电量。 BroadCastReceivers可以有安全漏洞,如果你也上广播时,除非你的广播本地那么你可以使用,当然LocalBroadcastManager不重视的权限。
AIDL我似乎更安全,但很难抽象为一组普遍使用。 我喜欢AIDL文件时,我有我想在另一个进程,使许多不同的API调用。 它就像一个遥控器。 用Broadcastreciever可能较难直接调用自定义的方法做的工作。
常见用途:
缺点:
常见用途:
因为它不是一个一刀切的情况下,每一种方法都有它的用途在那里执行得更好。
例如其更有效地在样病例使用AIDL:
- 需要同时服务于多个客户端的服务器
- 客户端不仅会向服务器发送一个请求,但也消耗了返回的响应。
在另一方面它更有效地在这样的情况下使用广播:
- 主题需要通知他的一个有趣的事件的观察员(偶尔出现)。 [不同于轮询模式。
- 一个应用程序需要通知的事另一个应用程序并且不消耗返回的响应。
这两种方法都可以使用相同的方法,自定义Android权限进行保护。 只允许使用相同的密钥签名的应用程序在通信共享。