zoukankan      html  css  js  c++  java
  • viewpager+fragment出现TransactionTooLargeException的大坑!!!

    最近apk包发给部分测试用户,反馈出现很多崩溃,异常是android.os.TransactionTooLargeException,看表面意思就是传送的数据太大,可是检查代码并没有传输很大的数据啊。

    因为项目里的这个页面超级复杂,一层viewpager+fragment嵌套,fragment里面又有第二层viewpager+fragment。

    复现崩溃出现的原因、发现当fragment的数量很多时,在左右滑动切换fragment的时候,页面正常显示,但是只要此时,点击任何地方去跳转到其他页面,必崩!

    开始查资料,尝试第一种方法,复写FragmentPagerAdapter里面的saveState(),如下:

        @Override
        public Parcelable saveState() {
            Bundle bundle = (Bundle) super.saveState();
            if (bundle != null) {
                bundle.putParcelableArray("states",null);
            }
            return bundle;
        }
    

     并不起作用,有点头疼。。

    尝试第二种方法,因为fragment的数量可以定制,多的时候大概有十几二十几个,每个页面的数据非常多,所以我setOffscreenPageLimit()方法注掉,去掉以后预加载页面数量相当于是1。结果仍然无效果。。。

    仔细检查代码,发现第一层fragment向第二层fragment传送了List集合数据,马上注释掉,bundle里面只留下一个id,终于解了!

    原因

    因为vp给每个fragment都有传递参数A,并且我传递的参数值很大,那么左右滑动vp的时候就会使得页面有多次的传递A值,总值超过了1M,触发了bundle溢出,使得点击跳转的时候发生了闪退。

    总结一句话就是不可以将过大的数据放入Bundle去发送。

    By LiYing

  • 相关阅读:
    JS输入框正则校验
    JVM 参数查看与设置
    Java 设计模式汇总
    Android Notification
    Android PendingIntent
    Android AsyncTask详解
    Java Stake实现
    Camera2相机预览流程
    java annotation
    Java io包 FileInputStream&FileOutStream
  • 原文地址:https://www.cnblogs.com/widgetbox/p/11069304.html
Copyright © 2011-2022 走看看