为什么Android N在使用Bundles时会抛出TransactionTooLargeException?

Col*_*ire 2 android android-7.0-nougat

在Android N上,无论何时我在bundle中传递一些二进制或大数据,我都会得到一个TransactionTooLargeException,但它在android M及以下版本上运行没有问题.

我怎么解决这个问题?

Col*_*ire 15

Android N中存在行为更改

引用文档:

现在很多平台API已经开始检查大跨越的有效载荷发送Binder交易,系统现在重新抛出 TransactionTooLargeExceptionsRuntimeExceptions,而不是默默地记录或抑制它们.一个常见的例子是存储太多数据Activity.onSaveInstanceState(),导致 在您的应用程序定位时ActivityThread.StopInfo抛出数据.RuntimeExceptionAndroid 7.0

注意:以M或以下为目标的应用不会抛出异常,它们会默默地记录或禁止它们

如何解决这个问题:

重新思考为什么首先需要捆绑数据的原因.

  1. 如果是二进制数据或位图,最好将其存储在文件中并传递包中的路径.

  2. 如果你传递的对象太多了

    • 您可以使用像库Otto,EventBus以避免它.

    • 只需再次传递构造Object所需的必要信息.

    • 创建一个单例类并在那里设置数据并从那里访问另一个Activity或Fragment.