【问题标题】:android Intents inline-data size limitandroid Intents inline-data 大小限制
【发布时间】:2013-05-06 09:52:55
【问题描述】:

我发现 android stock camera 应用程序在通过 Intent 上的 Parcelable 将图像传递回调用者时会将大小减小到约 50k。

在下面的源代码链接中搜索下一个文本:限制为 50k 像素,以便我们可以在意图中返回它

源码链接:Android Stock Camera Source Code

我的问题是,为什么会有这个限制,我可以通过意图传递的数据的实际大小限制是多少?我可以找到讨论这个问题的论坛,但没有来自 Google 的关于限制的真实文档。

【问题讨论】:

  • 您对最大 Byndle 尺寸更感兴趣。我也找不到任何具体的东西,但似乎 1MB 最常被提及为推测。顺便说一句,这个限制也有很好的含义——你开始思考“为什么我需要捆绑传输 5MB?”还有其他更好的方法
  • 问题是为了使我的应用程序与其他应用程序兼容,我必须能够以两种可能的方式返回位图,即通过 Uri 和通过意图上的位图。所以它不取决于我的应用程序,而是取决于另一个应用程序如何要求我。不幸的是,我发现一些应用程序通过一个可包裹的意图询问它,我认为这对他们来说是一个糟糕的设计,但我还能做什么。所以我想我将不得不缩小我的形象。

标签: android android-intent camera


【解决方案1】:

这与 binder 事务缓冲区有关:

在远程过程调用期间,调用的参数和返回值作为 Parcel 对象传输,存储在 Binder 事务缓冲区中。如果参数或返回值太大而无法放入事务缓冲区,则调用将失败并抛出TransactionTooLargeException

Binder 事务缓冲区有一个有限的固定大小,目前为 1Mb,由进程正在进行的所有事务共享。因此,当有许多事务正在进行时,即使大多数单个事务的大小适中,也可能会引发此异常。 1

如果您超出 Binder 事务缓冲区限制,您将获得 TransactionTooLargeException

该限制应该是 1MB,但它因设备而异,从略低于 512KB 到几乎完整的 1MB。

Android Documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-05
    • 2014-06-17
    • 2014-06-12
    • 2020-10-31
    • 2019-06-05
    • 2017-10-07
    • 2015-01-03
    • 1970-01-01
    相关资源
    最近更新 更多