fragment 在后台被杀死 数据丢失
来源:互联网 发布:手机淘宝上的免费开店 编辑:程序博客网 时间:2024/06/05 11:30
问题描述
- 日常排查bugly上面的错误时,发现Nullpointer的问题特别严重,而相关的特征都是应用在后台和应用带fragment。排查代码发现都做了为空判断,为什么还会出现空对象的情况呢?
模拟场景
- 如果应用常驻后台,内存有可能会被系统回收,当用户重新打开应用时,app进行恢复操作,此时应用报错。
- 模拟后台内存不足可以使用android studio的自带功能,如下,将应用退到后台,点击x按钮接着重新打开app既可模拟后台被杀死情况。
问题解决
- 由上述的模拟场景发现,确实是应用退到后台杀死引起,查看代码发现fragment也进行了赋值操作。很多人在这里陷入了误区,认为fragment是同一个,其实不然,当应用在后台被杀死时,活动默认通过onSaveInstanceState(Bundle outState)进行视图的保存,当用户再次打开时,会通过onRestoreInstanceState进行视图的恢复,问题就出在这里,fragment也被保存,所以恢复的时候,我们虽然重新创建了fragment,但是活动会从保存的数据取出旧的fragment,而旧的fragment的数据又被回收了,这就是导致出现NullPointer的问题所在。
应对措施
推荐方法
重写fragment的onSaveInstanceState方法,将需要保存的数据进行保存,在fragment重新创建的时候,取出相应的保存数据既可。
粗暴方法
- 重写activity的onSaveInstanceSate()方法,将super.onSaveInstanceState注释,这样子activity在被杀死时,就无法进行数据的保存了。
参考链接
我踩到的关于Fragment 状态的保存和恢复的坑
阅读全文
0 0
- fragment 在后台被杀死 数据丢失
- app 在后台时间过长被杀死,及时重启
- Android模拟内存不足,App在后台被杀死的情况
- 让一个Android应用一直运行在后台,不容易被杀死
- 如何让你的App永远在后台存活:对Android进程守护、闹钟后台被杀死的研究
- Fragment在后台被系统回收后
- 前台接收的数据在后台乱码
- .NET的GridView在后台删除数据
- 防止activity被杀死
- 避免service被杀死
- service不被杀死
- 在后台控制输出数据到前台的某个位置
- WPF中,怎么在后台代码进行数据绑定
- 数据在后台修改 删除 更新 正确代码(共享)
- 百度Frontia应用数据存储在后台运行不起来
- 绑定数据时。在后台给GridView添加事件
- Spring 4MVC框架下在后台解析JSON数据
- Ajax中通过response在后台传递数据
- IO流(5)--字节流读写中文
- 原生js实现jQuery常用方法的封装
- opengl问题
- 模拟实现qsort函数
- 迭代法求平方根
- fragment 在后台被杀死 数据丢失
- 数据倾斜
- poj日记(3295)
- 2017-12-10杭电OJ2015《偶数求和》
- GitLab安装
- 在MySQL中如何使非主键字段自增长
- elk
- Junit单元测试
- Dockerfile:mysql镜像编写