Android开发:V4包fragment, getActivity()报空以及页面产生混乱的解决方案

问题描述

Android开发中,如果我们用到V4包里面的Fragment,在App被切换到后台的时候,由于系统内存不足、或者切换横竖屏、又或者 App长时间在后台运行,Activity可能被回收,这种情况下fragment中的getActivity()会出现空指针异常。
如果没有用到getActivity(),也可能会出现页面混乱的情况。


问题原因

在App在后台被回收的时候,Fragment的状态被保存,而且并未随着父Activity的回收而被回收。
这种情况下,当我们再次打开后台的App后,首先加载的是未被回收的Fragment。
但此时,父Activity已经被内存回收,系统会重启该Activity,Fragment会再次被加载,这时就产生了第二种情况:页面混乱
如果Fragment中调用了getActivity()方法,由于父Activity重启还未完成,所以getActivity()方法会报空,这也就是第一种情况:getActivity()报空


解决方案

重点来了,如果了解了该问题产生的原因,解决方案就变得很简单。

第一种方法:不保存Ftagment的状态

在父Activity中,重写onSaveInstanceState()方法,将super.onSaveInstanceState(outState);注释掉,让其不再保存Fragment的状态,达到其随着MainActivity一起被回收的效果!

第二种方法:在恢复Fragment之前把保存Bundle里面的数据给清除

在是onCreate方法中加加上如下代码,其中arg0 就是的Bundle savedInstanceState这个参数

if(arg0 != null)
        {
            String FRAGMENTS_TAG = "android:support:fragments";
            // remove掉保存的Fragment
            arg0.remove(FRAGMENTS_TAG);
        }

感谢:
http://blog.sina.com.cn/s/blog_5da93c8f0102wc4f.html
http://blog.csdn.net/wantnowhy/article/details/24405845/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值