Activity被回收导致fragment的getActivity为空
2024-10-19 22:39:08
在编写含有Fragment代码的时候,经常会遇到这种情况,假如app长时间在后台运行,再点击进入会crash,而且fragment页面有重叠的现象。
如果系统内存不足、或者切换横竖屏、或者app长时间在后台运行,Activity都可能会被系统回收,然后Fragment并不会随着Activity的回收而被回收,从而导致,Fragment丢失对应的Activity。
这里,假设我们我们含有一个MainActivity里面包含了一个FramentA。
app发生的变化为:app长时间在后台运行,由于某种原因系统回收MainActivity——FragmentA被保存状态未被回收——再次点击app进入——首先加载的是未被回收的FragmentA的页面——由于MainActivity被回收,系统会重启MainActivity,FragmentA也会被再次加载——页面出现混乱,因为一层未回收的FragmentA覆盖在其上面——(假如FragmentA使用到了getActivity()方法)会报空指针,出现crash。
这种情况下,我们可以这样解决:
MainActivity重写onSaveInstanceState方法,将super.onSaveInstanceState(outState);注释掉,让其不再保存Fragment的状态,达到其随着MainActivity一起被回收的效果!
最新文章
- C# WCF服务端搭建和客户端调用
- Overview of the Oppia codebase(Oppia代码库总览)
- 用canvas开发H5游戏小记
- X264库直接压缩BITMAP格式数据
- jquery的offset与position的区别
- nRF51822之app_button控制uart的开启和关闭
- C#对Excel打印时,PageSetup 对象详解
- WCF之各种WCF引用方式
- Linux screen命令简介
- 解决SMARTFORMS 中table 控件单行跨页的问题
- elasticsearch的rest搜索---对于相关度的大牛的文档
- Java中 +=是什么意思 什么情况下用
- Unity 游戏框架搭建 (三) MonoBehaviour单例的模板
- MySQL查询1
- [LeetCode] Score After Flipping Matrix 翻转矩阵后的分数
- 利用redis 漏洞入侵挖矿临时解决办法
- CSRF与SSRF区别
- 《Javascript高级程序设计》第六章笔记整理
- $resource详解
- 为iOS应用制作一个二维码