gpt4 book ai didi

android - Android 中的 bundle 有限制吗?

转载 作者:可可西里 更新时间:2023-11-01 18:49:39 31 4
gpt4 key购买 nike

我想知道android bundle的数据大小是否有上限。我尝试按大小 >80k 的包发布数据,并抛出 android 致命异常。数据是可序列化的。

最佳答案

这取决于 bundle 的用途。 bundle 本身仅受内存量的限制。

bundle 的两个主要用途是使用 Intent 在组件之间传递信息和保存 Activity 的状态。

1。 Intent/ Binder

当用于在 Android 组件之间传递信息时,bundle 被序列化为一个 Binder 事务。进程中所有 Binder 事务的总大小为 1MB。如果超过此限制,您将收到此 fatal error “!!! FAILED BINDER TRANSACTION!!!”

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

引用: 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

The Binder transaction buffer has a limited fixed size, currently 1Mb, which is shared by all transactions in progress for the process. Consequently this exception can be thrown when there are many transactions in progress even when most of the individual transactions are of moderate size.

2。保存的实例状态(Activity onSaveInstanceState、onPause 等)

我发现在用于保存 Activity 状态的包中可以存储的大小没有限制。我做了一些测试,在收到内存不足异常试图分配我试图保存的数据之前,我可以成功存储大约 175mb。

更新:这项研究是在 2014 年进行的,较新版本的 Android 可能会因 bundle 超过 500kb 而崩溃

关于android - Android 中的 bundle 有限制吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8552514/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com