fragment 在后台被杀死 数据丢失

当Android应用在后台被系统杀死后,重新打开时可能会遇到Fragment数据丢失导致的NullPointer异常。问题在于系统在后台杀死应用时保存了Fragment状态,但恢复时旧的Fragment实例数据已被回收。解决方案包括重写Fragment的onSaveInstanceState方法来保存关键数据,或者注释掉Activity的onSaveInstanceState以避免数据保存。
摘要由CSDN通过智能技术生成

问题描述

  • 日常排查bugly上面的错误时,发现Nullpointer的问题特别严重,而相关的特征都是应用在后台应用带fragment。排查代码发现都做了为空判断,为什么还会出现空对象的情况呢?

模拟场景

  • 如果应用常驻后台,内存有可能会被系统回收,当用户重新打开应用时,app进行恢复操作,此时应用报错。
  • 模拟后台内存不足可以使用android studio的自带功能,如下,将应用退到后台,点击x按钮接着重新打开app既可模拟后台被杀死情况。
    这里写图片描述

问题解决

  • 由上述的模拟场景发现,确实是应用退到后台杀死引起,查看代码发现fragment也进行了赋值操作。很多人在这里陷入了误区,认为fragment是同一个,其实不然,当应用在后台被杀死时,活动默认通过onSaveInstanceState(Bundle outState)进行视图的保存,当用户再次打开时,会通过onRestoreInstanceState进行视图的恢复,问题就出在这里,fragment也被保存,所以恢复的时候,我们虽然重新创建了fragment,但
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值