在Android N上,每当我在bundle中传递一些二进制或大数据时,我都会得到一个TransactionTooLargeException
,但它在android M及以下版本上运行没有问题。
我该如何解决这个问题?
答案 0 :(得分:15)
Android N中存在行为更改
引用the docs:
许多平台API现在已开始检查大型有效负载 通过
Binder
个事务发送,系统现在重新生成TransactionTooLargeExceptions
为RuntimeExceptions
,而不是Activity.onSaveInstanceState()
默默地记录或抑制它们。一个常见的例子是存储ActivityThread.StopInfo
中的数据太多,导致RuntimeException
在您的应用中投放Android 7.0
目标Otto
。
注意:针对M或以下的应用不会抛出异常,他们会默默地记录或禁止它们
重新思考为什么首先需要捆绑数据的原因。
如果是二进制数据或位图,最好将其存储在文件中并传递包中的路径。
如果您传递的对象太多
您可以使用EventBus
,$rootScope.$broadcast
之类的库来避免它。
再次传递构建Object所需的必要信息。
创建一个单例类并在那里设置数据并从那里访问另一个Activity或Fragment。