Fragment放置后台很久(Home键退出很长时间),返回时出现Fragment重叠解决方案
来源:互联网 发布:excel2003电脑版软件 编辑:程序博客网 时间:2024/06/07 12:51
出现问题的应用场景:MainActivity继承自FragmentActivity,包含4个作为tab栏的Fragment(SupplyFragment, CarFragment, LocationFragment, UcenterFragment)。当打开app,此时按Home键退出app,长时间(半天或一天)后返回,点击”车辆管理“,还是显示的货源信息的ui界面,如下图:
在debug的时候,发现CarFragment是执行了onCreateView()的,意味着成功生成了车辆管理的界面,但究竟为什么仍然显示的是SupplyFragment的界面呢,直观感觉,SupplyFragment像一层蒙板一样放在最上层,点击其他4个tab栏,生成的Fragment都被隐藏在了它的下面。
后来在google查到相关资料,原因是:当Fragment长久不使用,系统进行回收,FragmentActivity调用onSaveInstanceState保存Fragment对象。很长时间后,再次打开app,系统恢复保存的Fragment,但是在FragmentActivity重新执行生命周期的时候,我们重新生成了fragment对象附加到该FragmentActivity,系统恢复的fragment和activity失去关联,进而出错。
解决方案为以下两种:
方法1:在fragmentActivity里oncreate方法判断savedInstanceState==null才生成新Fragment,否则不做处理。
方法2:在fragmentActivity里重写onSaveInstanceState方法,但不做实现,也就是将super.onSaveInstanceState(outState)注释掉。
方法2很好理解,当系统要回收Fragment时,我们告诉系统:不要再保存Fragment。相当于用户回到app的时候,我们就当用户是第一次打开app(因为很长时间没有操作了);方法1理论上没有问题,但本人在测试的时候,用了一种非常规的方案,横竖屏切换来测试,而在横竖屏切换时,系统会首先销毁FragmentActivity,再重新生成FragmentActivity,所以并没有工作,还要再研究。
提供第三种解决方案,也是我现在正在使用的 [code=java] if(savedInstanceState!=null){ FragmentManager manager = getSupportFragmentManager(); manager.popBackStackImmediate(null, 1); } [/code] 弹出原来保存的所有Fragment状态信息,重新加载
- 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重叠的完美解决方案
- CUDA 7/cuDNN/caffe/DIGITS实战教程
- Android 常用设计模式2 适配器模式
- 分享一百多套开发视频教程的下载地址
- 技术资料备份(持续更新)
- 在eclipse中配置好hadoop的插件后使用DFS遇到的问题
- Fragment放置后台很久(Home键退出很长时间),返回时出现Fragment重叠解决方案
- 简单的联动菜单
- 操作系统---基础题目汇总五
- HDU 1237 简单计算器
- oracle创建表空间及用户赋予权限
- poj 1228 凸包(能否恢复农场形状)
- JavaScript变量作用域和变量提升解释(JavaScript Variable Scope and Hoisting Explained)
- 10018---jQuery--遍历
- 【Android】ListView高度调整工具