zoukankan      html  css  js  c++  java
  • Android开发 APP闪退Fragment重叠泄露问题

    问题描述

      当在其他页面出现异常后app触发闪退,在返回到有使用FragmentTransaction添加Fragment的页面,会出现Fragment重叠,数据不一致的问题

    问题原因

      App闪退后,要返回的上一级Activity会被重新创建(有点类似横竖屏后的Activity), Activity在savedInstanceState会将保存的Fragment重新添加. 而你又在重新触发的生命周期里再次创建Fragment并且添加到FragmentTransaction.这个时候就会出现重复的Fragment.

    也可以用抓内存泄露的方式看到重复的Fragment有2个内存地址

    解决办法

    方法1:在fragmentActivity里oncreate方法判断savedInstanceState==null才生成新Fragment,否则不做处理。

    方法2:在fragmentActivity里重写onSaveInstanceState方法,但不做实现,也就是将super.onSaveInstanceState(outState)注释掉。

    上面2个方式是百度上大量提供的方法,还有一种办法是在替代回去

        @Override
        public void onAttachFragment(@NonNull Fragment fragment) {
            super.onAttachFragment(fragment);
            if (mHomeFragment == null && fragment instanceof HomeFragment) {
                mHomeFragment = (HomeFragment) fragment;
                return;
            }
            if (mMineFragment == null && fragment instanceof MineFragment) {
                mMineFragment = (MineFragment) fragment;
                return;
            }
            //因为MessageFragment是Message模块路由的Fragment,所以这里用类名判断
            if (mMessageFragment == null && TextUtils.equals(fragment.getClass().getSimpleName(), "MessageFragment")) {
                mMessageFragment = (Fragment) fragment;
            }
        }
  • 相关阅读:
    中缀表达式转换为后缀表达式
    看4S员工自爆!黑啊,太黑了
    解剖孩子晚上磨牙的6大原因
    2D 3D IMAX 电影座位选择
    蒸鸡蛋羹
    0010 4S店提车注意事项
    2012年北京市车船税基准税额
    火车票预订 电话 和 网站
    远程计算机关机方法
    win7 用户信息丢失
  • 原文地址:https://www.cnblogs.com/guanxinjing/p/15795028.html
Copyright © 2011-2022 走看看