谢谢 Ben
通过意图发送数据时,应小心限制数据大小为几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操作系统的Binder框架
需要编写线程安全代码。
Binder事务缓冲区具有有限的固定大小,目前为1Mb,该大小由进程中所有正在进行的事务共享。 https://developer.android.com/reference/android/os/TransactionTooLargeException.html"
安全性:AIDL允许开发人员将其接口公开给其他应用程序。客户端和服务端都必须同意才能彼此通信。
常见用途:
缺点:
常见用途:
由于并非一刀切的情况,每种方法都有其更好的使用场景。
例如,在以下情况下使用AIDL更有效率:
– 需要一个服务器同时为多个客户端提供服务
– 客户端不仅需要向服务器发送请求,还需要消耗返回的响应。
另一方面,在以下情况下使用广播更有效率:
– 主题需要通知观察者有趣的事件(不经常发生)[与轮询模式不同]。
– 一个应用程序需要通知另一个应用程序某些内容,并且不消耗返回的响应。
这两种方法都可以使用相同的方式进行安全保护,即自定义Android权限。这样只允许使用相同密钥签名的应用程序共享通信。
我认为一个缺点可能是电池寿命,因为持续监听接收器会对电池电量造成压力。如果在广播时不强调权限,BroadCastReceivers可能存在安全漏洞,除非你只在本地广播,那么当然可以使用LocalBroadcastManager。
对我来说,AIDL似乎更安全,但更难以抽象化以便在团队中进行通用使用。当我想在另一个进程中进行许多不同的API调用时,我喜欢使用AIDL文件。就像一个遥控器一样。使用Broadcastreciever可能更难直接调用自定义方法来执行工作。