Fragment放置后台很久(Home键退出很长时间),返回时出现Fragment重叠解决方案
来源:互联网 发布:c语言中删除文件 编辑:程序博客网 时间:2024/05/18 19:35
出现问题的应用场景:MainActivity继承自FragmentActivity,包含4个作为tab栏的Fragment(SupplyFragment, CarFragment, LocationFragment, UcenterFragment)。当打开app,此时按Home键退出app,长时间(半天或一天)后返回,点击”车辆管理“(CarFragment),还是显示的货源信息(SupplyFragment)的ui界面,如下图:
在debug的时候,发现CarFragment是执行了onCreateView()的,意味着成功生成了车辆管理的界面,但究竟为什么仍然显示的是SupplyFragment的界面呢,直观感觉,SupplyFragment像一层蒙板一样放在最上层,点击其他4个tab栏,生成的Fragment都被隐藏在了它的下面。
后来在google查到相关资料,原因是:当Fragment长久不使用,系统进行回收,FragmentActivity调用onSaveInstanceState保存Fragment对象。很长时间后,再次打开app,系统恢复保存的Fragment,但是在FragmentActivity重新执行生命周期的时候,我们重新生成了fragment对象附加到该FragmentActivity,系统恢复的fragment和FragmentActivity失去关联,进而出错。
解决方案为以下两种:
方法1:在fragmentActivity里oncreate方法判断savedInstanceState==null才生成新Fragment,否则不做处理。
方法2:在fragmentActivity里重写onSaveInstanceState方法,但不做实现,也就是将super.onSaveInstanceState(outState)注释掉。
方法2很好理解,当系统要回收Fragment时,我们告诉系统:不要再保存Fragment。相当于用户回到app的时候,我们就当用户是第一次打开app(因为很长时间没有操作了)。
方法1理论上没有问题,但本人在测试的时候,用了一种非常规的方案,横竖屏切换来测试,而在横竖屏切换时,系统会首先销毁FragmentActivity再重新生成,无法模拟测试条件,还要再研究。
- Fragment放置后台很久(Home键退出很长时间),返回时出现Fragment重叠解决方案
- Fragment放置后台很久(Home键退出很长时间),返回时出现Fragment重叠解决方案
- Fragment放置后台很久(Home键退出很长时间),返回时出现Fragment重叠解决方案
- Fragment放置后台很久(Home键退出很长时间),返回时出现Fragment重叠解决方案
- Fragment放置后台很久(Home键退出很长时间),返回时出现Fragment重叠解决方案
- Fragment应用放置后台很久,被系统回收,出现crash(如viewpager + fragment)
- Activity嵌套Fragment应用放置后台很久,被系统回收,出现crash
- 使用Fragment应用放置后台很久,被系统回收,出现crash
- 使用Fragment应用放置后台很久被系统回收出现crash
- 使用Fragment应用放置后台很久再次进入出现程序奔溃
- 记fragment重叠 解决方案
- android Fragment 返回键 退出
- Fragment出现重叠现象
- Fragment应用放置后台很久再次进入不会重新刷新数据展示、或者直接崩溃问题解决
- Android关于Fragment长期置于后台返回重叠的问题
- Android关于Fragment长期置于后台返回重叠的问题
- Android transaction Fragment时按返回键直接退出,没有返回到上一个Fragment
- fragment重叠的完美解决方案
- 好用的android九宫格密码锁代码实现。(前段时间博客被盗好久没写了。)
- 复数的计算
- 给程序加上声音(迷宫游戏)多线程
- [BZOJ3506][BZOJ1552] [Cqoi2014]排序机械臂
- iOS开发--CocoaPods pod install/pod update更新慢的问题
- Fragment放置后台很久(Home键退出很长时间),返回时出现Fragment重叠解决方案
- ARM信号量操作指令
- ListActivity
- swift学习---长句部分五(第一次计划看一本完整的英文资料,你是最棒的,加油)
- fastJson使用
- hdu3652:B-number
- 黑马程序员:论反射的正确使用以及应用范围2·个人感悟 反射有啥用?
- Longest Common Prefix
- 网站(Web)压测工具Webbench源码分析