维护的APP一直在报一个TransactionTooLargeException异常,如下:

doris STRICT_TRANS_TABLES报错 transaction error_数据

如果你看到这篇文章那么恭喜你遇到了遇到了小麻烦,这个TransactionTooLargeException异常产生的原因就是使用intent传递的数据太大,并且这个问题多发生于安卓版本7.0以上,从官方文档中得知,传递的数据或者Binder一般不宜太大,否则则会抛出该异常;Ps:一般系统不一样的话,最大限制也会有所差异!

知道了原因那么说说我的解决方法,希望对你们解决此问题有所帮助:

1:因为刚拿到项目,并不太熟悉,而且友盟上并没有具体哪一行,那个类产生此问题,这是比较头疼的了,我试过手测或者使用mokey测试,都无法复现此bug,所以我使用了最笨拙的方法,逐一排查;全局搜索putExtra,putParcelable,putSerializable,看看使用intent都传递了什么数据,重点看看有没有图片,视频或者比较复杂的对象,然后在用断点排查,找到了一些可能会出现此问题的地方,然后换了另外一种方式传值方式;(可以用eventbus,全局静态变量传值等等)

2:后来这种方式并没有解决,偶然一次发现这个bug是在使用分享功能的时候出现的问题;(分享使用的是友盟分享),经过各种查找资料发现只需要在崩溃的页面复写onSaveInstanceState方法,注释掉super.onSaveInstanceState(outState)即可:具体如下

doris STRICT_TRANS_TABLES报错 transaction error_分享功能_02

然后就完美的解决了bug,崩溃率从百分之5点几一下降到了百分之零点几!哈哈哈~~~

 总结:具体的便是这两种方法