问题描述
- 日常排查bugly上面的错误时,发现Nullpointer的问题特别严重,而相关的特征都是应用在后台和应用带fragment。排查代码发现都做了为空判断,为什么还会出现空对象的情况呢?
模拟场景
- 如果应用常驻后台,内存有可能会被系统回收,当用户重新打开应用时,app进行恢复操作,此时应用报错。
- 模拟后台内存不足可以使用android studio的自带功能,如下,将应用退到后台,点击x按钮接着重新打开app既可模拟后台被杀死情况。
问题解决
- 由上述的模拟场景发现,确实是应用退到后台杀死引起,查看代码发现fragment也进行了赋值操作。很多人在这里陷入了误区,认为fragment是同一个,其实不然,当应用在后台被杀死时,活动默认通过onSaveInstanceState(Bundle outState)进行视图的保存,当用户再次打开时,会通过onRestoreInstanceState进行视图的恢复,问题就出在这里,fragment也被保存,所以恢复的时候,我们虽然重新创建了fragment,但