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

本文探讨了在Android N版本中遇到的TransactionTooLargeException异常问题,该问题出现在使用Intent传递大量数据时。通过分析官方文档,发现这是由于7.0版本中对Binder数据传输的限制增强所导致。文章分享了一种解决方案,即将数据存储在一个静态域中,避免通过Intent传递大量数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

      我是因为在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.youkuaiyun.com/wjj1996825/article/details/84771777

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值