android捆绑包有一些限制吗?

我想知道android bundle的数据大小是否有上限。 我尝试通过大小> 80k的捆绑发布数据,并抛出android致命exception。数据是可序列化的。

我认为这个限制是500kb。 您可以将传递的对象保存在一个文件中,而不是将该文件的path发送到该包中。 你可以查看我在SO所问的类似问题

这取决于捆绑的目的。 捆绑本身仅受内存量的限制。

捆绑的两个主要用途是使用意图在组件之间传递信息并保存活动的状态。

1.意图/粘合剂

当用于在Android组件之间传递信息时,捆绑包将被序列化为绑定事务。 进程中所有绑定事务的总大小为1MB。 如果超过此限制,您将收到此致命错误“!!!失败的粘合剂交易!!!”

build议您将这些数据包中的数据尽可能小,因为这是一个共享缓冲区,任何超过几千字节的数据都应该写入磁盘。

参考: https //android.googlesource.com/platform/frameworks/base/+/jb-release/core/jni/android_util_Binder.cpp

ALOGE("!!! FAILED BINDER TRANSACTION !!!"); // TransactionTooLargeException is a checked exception, only throw from certain methods. // FIXME: Transaction too large is the most common reason for FAILED_TRANSACTION // but it is not the only one. The Binder driver can return BR_FAILED_REPLY // for other reasons also, such as if the transaction is malformed or // refers to an FD that has been closed. We should change the driver // to enable us to distinguish these cases in the future. 

参考: http : //developer.android.com/reference/android/os/TransactionTooLargeException.html

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

2.保存的实例状态(活动onSaveInstanceState,onPause等)

我发现在用来保存活动状态的包中可以存储的大小没有限制。 我做了一些testing,可以成功地存储大约175MB之前,我收到了内存不足的例外,试图分配我试图保存的数据。

是的,现在在Android的牛轧糖,它会崩溃,如果你超过极限大约(500Kb)。

android牛轧糖问题

我认为最大的包大小是1024千字节。 为了在活动中传输大对象,你应该尝试其他方式(内存caching,本地存储等)。

根据Google Android API ,date应该小于50K。

是的,它有1MB的限制。

你可以使用Singleton类来传递数据。