Activity被回收导致fragment的getActivity为空
Posted 安卓笔记侠
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Activity被回收导致fragment的getActivity为空相关的知识,希望对你有一定的参考价值。
在编写含有Fragment代码的时候,经常会遇到这种情况,假如app长时间在后台运行,再点击进入会crash,而且fragment页面有重叠的现象。
如果系统内存不足、或者切换横竖屏、或者app长时间在后台运行,Activity都可能会被系统回收,然后Fragment并不会随着Activity的回收而被回收,从而导致,Fragment丢失对应的Activity。
这里,假设我们我们含有一个MainActivity里面包含了一个FramentA。
app发生的变化为:app长时间在后台运行,由于某种原因系统回收MainActivity——FragmentA被保存状态未被回收——再次点击app进入——首先加载的是未被回收的FragmentA的页面——由于MainActivity被回收,系统会重启MainActivity,FragmentA也会被再次加载——页面出现混乱,因为一层未回收的FragmentA覆盖在其上面——(假如FragmentA使用到了getActivity()方法)会报空指针,出现crash。
这种情况下,我们可以这样解决:
MainActivity重写onSaveInstanceState方法,将super.onSaveInstanceState(outState);注释掉,让其不再保存Fragment的状态,达到其随着MainActivity一起被回收的效果!
以上是关于Activity被回收导致fragment的getActivity为空的主要内容,如果未能解决你的问题,请参考以下文章
从 Activity 导航到 Fragment 并返回到 Activity 导致该 Activity 被多次创建
从 Fragment 移动到 Activity 导致 android.os.TransactionTooLargeException