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

时间:2016-09-15 09:15:04

标签: android android-7.0-nougat

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

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:15)

Android N中存在行为更改

引用the docs

  

许多平台API现在已开始检查大型有效负载   通过Binder个事务发送,系统现在重新生成   TransactionTooLargeExceptionsRuntimeExceptions,而不是Activity.onSaveInstanceState()   默默地记录或抑制它们。一个常见的例子是存储   ActivityThread.StopInfo中的数据太多,导致   RuntimeException在您的应用中投放Android 7.0   目标Otto

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

如何解决这个问题:

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

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

  2. 如果您传递的对象太多

    • 您可以使用EventBus$rootScope.$broadcast之类的库来避免它。

    • 再次传递构建Object所需的必要信息。

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