我发现 android stock camera 应用程序在通过意图上的 parcelable 将图像传递回调用者时会将大小减小到 ~50k。
在下面的源代码链接中搜索下一个文本:限制为 50k 像素,以便我们可以在意图中返回它
我的问题是,为什么会有这个限制,以及我可以通过意图传递的数据的实际大小限制是多少?我可以找到讨论这个问题的论坛,但谷歌没有关于限制的真正文档。
我发现 android stock camera 应用程序在通过意图上的 parcelable 将图像传递回调用者时会将大小减小到 ~50k。
在下面的源代码链接中搜索下一个文本:限制为 50k 像素,以便我们可以在意图中返回它
我的问题是,为什么会有这个限制,以及我可以通过意图传递的数据的实际大小限制是多少?我可以找到讨论这个问题的论坛,但谷歌没有关于限制的真正文档。
这与活页夹事务缓冲区有关:
在远程过程调用期间,调用的参数和返回值作为
Parcel
存储在 Binder 事务缓冲区中的对象进行传输。如果参数或返回值太大而无法放入事务缓冲区,则调用将失败并被TransactionTooLargeException
抛出。Binder 事务缓冲区有一个有限的固定大小,目前为 1Mb,由进程正在进行的所有事务共享。因此,当有许多事务正在进行时,即使大多数单个事务的大小适中,也可能会引发此异常。1
如果超出 Binder 事务缓冲区限制,您将获得一个TransactionTooLargeException
.
限制应该是 1MB,但它因设备而异,从略低于 512KB 到几乎完整的 1MB。