android.os.TransactionTooLargeException,android.app.servertransaction.PendingTransactionActions的解决

Binder传输的数据太大导致的异常。
如果Binder的参数或返回值太大,不适合的事务缓冲区,然后调用将失败,并将被抛出TransactionTooLargeException。
解决方法:不要将大量数据传入Binder

最近在我们的页面中有5个fragment,然后会保存大量数据,跳转到下一个activity的时候,等2-3秒就会直接闪退,经过查找文档,确认需要以下方案:

于是我仔细分析了一下Crash的场景,都是从主页面开启一个新的页面(设置页)之后,1-2秒左右才发生的Crash,所以此时可以断定跟跳转的Intent是没关系的,那么这里短短的时间内发生了什么呢?

继续分析:
首先我进入设置页之后全部都是没有进行任何操作,而且进来之后程序并非必然崩溃,那么问题不在这个页面,那么只可能是因为进入设置页之前的场景不同了。

由于我的主页Activity内部是由FragmentStack来实现的,简单来说,就是各个Fragment来回跳转,所以打开设置页之前,当前栈顶的Fragment并不一样,所以有时崩溃,有时不崩溃。

所以我就让每个Fragment都作为栈顶,进入设置页,看是否崩溃。最终定位到一个Fragment,只要该Fragment位于栈顶,那么跳转页面之后,必然会发生崩溃。。。实际上在开启新的Activity之后,上一个Activity中的Fragment都会调用onSaveInstanceState(Bundle outState)方法,而其实Intent不能传递较大的数据,也跟Bundle的数据大小限制有关,是否与此有关呢。

那么解决方案很简单,如下:

在fragment中将bundle调用clear方法清空就行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值