public void replaceFragment(Fragment fragment) {
        FragmentTransaction ft = manager.beginTransaction();
        ft.replace(R.id.container, fragment);
        ft.commit();
    }  R.id.container是一个FrameLayout,用来放fragment,我快速点击几个按钮替换fragment会引起内存泄漏。
 具体看下图:
 
 fragment 我只是简单在上面放一些控件,具体类里面我连findViewById都还进行。但是就是会出错。
replaceFragment的调用,我每次都是new一个新的对应fragment。麻烦大佬指点一下。

解决方案 »

  1.   

    不要每次都replace啊
      

  2.   

    repalce等于add remove
      

  3.   

        private boolean isFirstLoad = false;//初始化为false
    @Override
        public void setUserVisibleHint(boolean isVisibleToUser) {
            super.setUserVisibleHint(isVisibleToUser);
            if (isFirstLoad && isVisibleToUser) {            isFirstLoad = false;
            }
        }
    避免重复加载就可以
      

  4.   


    repalce等于add remove问题是我的框架是下面有一排按钮,很多,没点一个上面的区域就要显示对应的fragment,如果我不用replace的方式,释放原理的,那么最后有可能就相当于所有fragment多存在,这样很耗内存。
      

  5.   

    我的fragment没初始化,就一个空壳。就onCreateView时用inflate创建view,然后就啥都不敢。
      

  6.   

    我觉得如果是Viewpager+Fragment的话,你的问题出现在Adapter的getItem()上,至于其他我也不清楚你如何编写的代码。可以参考https://blog.csdn.net/qq_32536991/article/details/88837924
      

  7.   


    没用Viewpager
      

  8.   

    好像是EditText引起的,只要fragment上面放了EditText就会。
      

  9.   


    repalce等于add remove问题是我的框架是下面有一排按钮,很多,没点一个上面的区域就要显示对应的fragment,如果我不用replace的方式,释放原理的,那么最后有可能就相当于所有fragment多存在,这样很耗内存。
    用add然后显示show
      

  10.   

    你用replace性能才不高呢
      

  11.   

    几十个fragment都一起add,太疯狂了。
      

  12.   

    几十个fragment都一起add,太疯狂了。
    你可以用谁加谁啊,fragment是轻量级的