2013-05-06 52 views
1

我发现Android股票相机应用程序,当通过意图上的parcelable将图像传回给调用者时,会将大小减小到〜50k。android intents行内数据大小限制

搜索在下面的源代码链接的下一个文本:限制为50K像素,所以我们可以在意向

源代码链接回吧:Android Stock Camera Source Code

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

+1

您对最大的Byndle大小更感兴趣。我也无法找到任何具体的东西,但似乎1MB最常被提及为猜测。顺便说一句,这个限制也有很好的含义 - 你开始思考“为什么我需要将5MB转移到一个捆绑包中?”有其他更好的方法 – 2013-05-06 10:33:13

+0

问题是,为了使我的应用程序与其他应用程序兼容,我必须能够以两种可能的方式返回位图,这两种方式都是通过Uri和意图上的位图。所以它不取决于我的应用程序,而是取决于另一个应用程序对我的要求。不幸的是,我发现了一些应用程序,通过意图对它进行询问,我认为这是一个糟糕的设计,但我还能做什么。所以我想我将不得不缩小我的形象。 – PerracoLabs 2013-05-06 10:49:14

回答

0

这与粘合剂事务缓冲器:

在远程过程调用,参数和调用的返回值被传输作为存储在活页夹的事务缓冲器Parcel对象。如果参数或返回值太大而无法放入事务缓冲区中,则调用将失败,并且将引发TransactionTooLargeException

活页夹事务缓冲区具有有限的固定大小,当前为1Mb,由进程中正在进行的所有事务共享。因此,即使大多数单个交易的规模适中,当有许多交易正在进行时,这种异常也会被抛出。 1

如果超过了事务缓存限制,您将得到TransactionTooLargeException

该限制应该是1MB,但它随设备的不同而不同,从小于512KB到几乎满1MB。

Android Documentation