Android IPC最大交易规模?

时间:2016-07-04 01:19:28

标签: android ipc android-binder transactiontoolargeexception

我正在使用Binder制作小型Android应用程序。

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

我无法理解为什么这是有限的。有没有理由限制最大交易规模? Linux SOCK_STREAM也是IPC,但它没有限制。

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

如果框架没有限制IPC规模,是否存在任何重要案例?据我所知,即使没有对最大IPC大小的限制,Linux也能正常运行。

2 个答案:

答案 0 :(得分:0)

限制是阻止使用Binder传输大量数据。特别是在较旧的设备上,这样做可能会影响其他应用程序,更重要的是,可能影响系统本身的正常运行。许多系统组件,例如用户界面,服务等,在很大程度上依赖于Binder。

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

答案 1 :(得分:0)

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

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