Fragment中调用getActivity为null的问题

很多人都曾被这个问题所困扰,如果app长时间在后台运行,再次进入app的时候可能会出现crash,而且fragment会有重叠现象。如果系统内存不足、切换横竖屏、app长时间在后台运行,Activity都可能会被系统回收然后重建,但Fragment并不会随着Activity的回收而被回收,创建的所有Fragment会被保存到Bundle里面,从而导致Fragment丢失对应的Activity。

1.在前面提到的几种情况下系统回收了Activity
2.通过onSaveInstanceState保存Fragment的状态
3.用户再次点击进入app
4.由于Activity被回收,系统会重启Activity,根据之前保存的Fragment的状态恢复fragment
5.Activity的代码逻辑中,会再次创建新的Fragment
6.页面出现混乱,覆盖了两层的fragment。假如恢复的Fragment使用到了getActivity()方法,会报空指针异常

对于上面的问题,可以考虑下面这两种解决办法:

1、不保存fragment的状态:在MyActivity中重写onSaveInstanceState方法,将super.onSaveInstanceState(outState);注释掉,让其不再保存Fragment的状态,达到fragment随MyActivity一起销毁的目的。

2、重建时清除已经保存的fragment的状态:在恢复Fragment之前把Bundle里面的fragment状态数据给清除。方法如下:

        if(savedInstanceState!= null)
        {
            String FRAGMENTS_TAG =  "android:support:fragments";
            savedInstanceState.remove(FRAGMENTS_TAG);

        }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 懒得处理样式了, 将就着看吧. 官网地址: https://developer.android.com/topic...
    Reddington_604e阅读 5,798评论 0 1
  • 总结 Fragment初始化用newInstance viewPager开多Fragment, 考虑懒加载 get...
    我不是死胖子阅读 4,119评论 0 4
  • 《Android Fragment完全解析,关于碎片你所需知道的一切》 我们都知道,Android上的界面展示都是...
    cxm11阅读 6,678评论 2 19
  • 1 Fragment是什么? Fragment碎片,我的理解就是一个具有生命周期的容器控件,只不过Fragment...
    WangGavin阅读 8,917评论 1 6
  • Activity的状态保存和恢复 Activity的状态什么时候需要保存和恢复 Activity的销毁一般分为两种...
    CP9阅读 15,073评论 0 15

友情链接更多精彩内容