【问题标题】:Android IPC maximum transaction size?Android IPC 最大事务大小?
【发布时间】:2016-11-05 15:48:11
【问题描述】:

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

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

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

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

如果框架没有限制 IPC 大小,是否有任何关键情况?据我所知,即使没有最大 IPC 大小限制,Linux 也能正常运行。

【问题讨论】:

    标签: android ipc android-binder transactiontoolargeexception


    【解决方案1】:

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

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

    【讨论】:

    • 但是为什么是 1MB? 1MB 限制有理论依据吗?还是只是一个假设?
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-02-13
      • 2010-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多