1

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

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

源码链接:Android Stock Camera 源码

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

4

1 回答 1

0

这与活页夹事务缓冲区有关:

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

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

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

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

安卓文档

于 2016-02-02T14:25:07.487 回答