5

我正在制作使用 Binder 相互通信的小型 Android 应用程序。

据我所知,Android Binder 有一个最大事务大小(1MB)。例如,TransactionTooLargeException当应用程序尝试使用 Binder 事务发送大于 1MB 的消息时抛出。

我不明白为什么这是有限的。是否有任何理由限制最大交易规模?LinuxSOCK_STREAM也是IPC,但没有限制。

这个限制有什么合理的理由吗?似乎 Android 文档没有解释为什么它们将事务大小限制为 1MB。('Binder 事务缓冲区具有有限的固定大小'那么他们为什么要限制缓冲区?)。

如果框架没有限制 IPC 大小,是否有任何关键案例?据我所知,即使对最大 IPC 大小没有限制,Linux 也能很好地工作。

4

2 回答 2

0

官方文档说 1MB。对于大数据,更喜欢按照 Paul 的建议使用:带有文件描述符、共享内存或不同 IPC(例如套接字)的 Binder。

https://developer.android.com/reference/android/os/TransactionTooLargeException

于 2021-03-12T15:08:06.030 回答
0

限制是不鼓励使用 Binder 传输大量数据。尤其是在旧设备上,这样做可能会影响其他应用程序,更重要的是,会影响系统本身的正常运行。许多系统组件,例如用户界面、服务等,都非常依赖 Binder。

尽管其他形式的 IPC 可能设计用于传输大量数据,但 Binder 并非如此。相反,Android 提供了其他方式来实现这一点,例如通过 Binder 向数据发送能力(例如,文件描述符、URI)。

于 2016-07-11T15:13:50.237 回答