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方法清空就行。