Caused by: android.os.TransactionTooLargeException:data parcel size 696260 bytes异常解决方案

     今天写东西时遇到这个问题,很奇怪。

      我是因为在intent里传了一个对象数组列表也就是List的原因。

      查询资料:报TransactionTooLargeException异常的手机,集中在Android N的版本里,也就是版本号只有24和25的,低于24或者高于25的一概没有。我们的App最低兼容到了16,但是即便在很古老的4.0,4.1,4.4的手机上也没有报这个错误。显然在Android N中,一定有一些特别的地方。

       看下官方文档对于7.0发生了什么变动的一段说明:

       Many platform APIs have now started checking for large payloads being sent across Bindertransactions, and the system now rethrows TransactionTooLargeExceptions as RuntimeExceptions, instead of silently logging or suppressing them. One common example is storing too much data in onSaveInstanceState(), which causes ActivityThread.StopInfo to throw a RuntimeException when your app targets Android 7.0.

      可以看到,7.0的改动日志里确实提到了,Binder的数据传输确实有了新的限制,当数据量比较大的时候就会抛出 TransactionTooLargeExceptions ,不过这里并没有具体的说明到底多大的数据量会造成这个问题。这应该就是原因所在了。限制Binder的数据量,自然是为了性能考虑,虽然可以理解但搞不懂为什么不直接说明具体的限制,当然也许不同配置的手机限制不同。

   所以为了解决这个问题我放弃了传递List,改为把List单独存在一个类中作为一个静态域,让所有的类共用,这样就行了。

   附上学习博客:https://blog.csdn.net/wjj1996825/article/details/84771777

 

你可能感兴趣的:(Android,安卓开发填坑记录,java)