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

来源:互联网 发布:node常用模块 编辑:程序博客网 时间:2024/05/16 19:50

原文:http://my.oschina.net/u/1011854/blog/469138

Activity被回收导致fragment的getActivity为null的解决办法
发表于2个月前(2015-06-20 18:44) 阅读(1087) | 评论(0) 22人收藏此文章, 我要收藏
赞2
8月22日珠海 OSC 源创会正在报名,送机械键盘和开源无码内裤

摘要 如果系统内存不足或者切换横竖屏或者app长时间在后台运行,Activity都可能会被系统回收,然后Fragment并不会随着Activity的回收而被回收,从而导致,Fragment丢失对应的Activity

这两天一直被这个问题困扰,假如app长时间在后台运行,再点击进入会crash,而且fragment页面有重叠现象,让我十分不爽。研究了一天,终于明白其中的原理并加以解决。解决办法如下:如果系统内存不足、或者切换横竖屏、或者app长时间在后台运行,Activity都可能会被系统回收,然后Fragment并不会随着Activity的回收而被回收,从而导致,Fragment丢失对应的Activity。这里,假设我们继承于FragmentActivity的类为MainActivity,其中用到的Fragment为FragmentA。app发生的变化为:某种原因系统回收MainActivity——FragmentA被保存状态未被回收——再次点击app进入——首先加载的是未被回收的FragmentA的页面——由于MainActivity被回收,系统会重启MainActivity,FragmentA也会被再次加载——页面出现混乱,因为一层未回收的FragmentA覆盖在其上面——(假如FragmentA使用到了getActivity()方法)会报空指针,出现crash。原理虽然有点绕,但是解决办法很简单:MainActivity重写onSaveInstanceState方法,将super.onSaveInstanceState(outState);注释掉,让其不再保存Fragment的状态,达到其随着MainActivity一起被回收的效果!
0 0
原创粉丝点击