android fragment 白屏,当应用Crash后fragment出现白屏

前段时间,发现一个问题,就是当应用发生Crash后,fragment莫名其妙的出现了白屏,经检查发现,其实并不是fragment没有加载而是空指针导致了数据无法加载所以产生了白屏现象。这是一个什么空指针呢?错误信息显示,在fragment中使用了getContext()方法 返回了null。这就奇怪了。应用崩溃,activity重启,上下文对象应该已经产生了呀!为什么还是会获取到null。我们知道fragment是依附于Activity的,可以说Activity在它就在,Activity不再他就销毁。现在既然activity已经重新恢复了为什么,还是会拿不到Context对象?

其实一切都是这个方法造成的。

@Override

protected void onSaveInstanceState(Bundle outState) {

//注释即可解决问题

//super.onSaveInstanceState(outState);

}

当发生异常之后,系统会尝试的去重新恢复界面,就会执行这个方法,这个方法里面系统缓存了,之前界面的一些数据,包括fragment,可以得知Activity中的fragment也被系统给缓存起来了,发生崩溃以后fragment并没有随着Activity而销毁掉。因此这个时候fragment是不属于新的Activity的,还是旧的,所以才会拿不到Context对象。我们需要做的就是不让系统缓存,所以只需要把上面代码中的方法给注释掉就好了。这样fragment就会跟着Activity一起销毁掉了。

由上面的崩溃产生了一个思考。

当Activity被系统给回收了会不会也导致fragment的getActivity或getContext为null?

答案显而易见。可以肯定是一定的。曾经一直出现的莫名其妙的白屏,我都误认为是崩溃了,一直都无法彻底根除,知道现在明白的原由,才发现原来一直都走错了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值