Activity被回收致使fragment的getActivity为null的解决办法

    这两天一直被这个问题困扰,假如app长时间在后台运行,再点击进入会crash,并且fragment页面有重叠现象,让我十分不爽。研究了一天,终于明白其中的原理并加以解决。解决办法以下: app

    若是系统内存不足、或者切换横竖屏、或者app长时间在后台运行,Activity均可能会被系统回收,而后Fragment并不会随着Activity的回收而被回收,从而致使,Fragment丢失对应的Activity。 spa

    这里,假设咱们继承于FragmentActivity的类为MainActivity,其中用到的Fragment为FragmentA。 指针

    app发生的变化为:某种缘由系统回收MainActivity——FragmentA被保存状态未被回收——再次点击app进入——首先加载的是未被回收的FragmentA的页面——因为MainActivity被回收,系统会重启MainActivity,FragmentA也会被再次加载——页面出现混乱,由于一层未回收的FragmentA覆盖在其上面——(假如FragmentA使用到了getActivity()方法)会报空指针,出现crash。 继承

    原理虽然有点绕,可是解决办法很简单:
内存

    MainActivity重写onSaveInstanceState方法,将super.onSaveInstanceState(outState);注释掉,让其再也不保存Fragment的状态,达到其随着MainActivity一块儿被回收的效果
get

相关文章
相关标签/搜索