Fragment放置后台很久(Home键退出很长时间),返回时出现Fragment重叠解决方案
来源:互联网 发布:markdown mac 编辑器 编辑:程序博客网 时间:2024/05/17 22:23
(转载)http://blog.csdn.net/eclothy/article/details/41912445
出现问题的应用场景: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,所以并没有工作,还要再研究。
- 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 调用系统自带的电话和设置功能
- 呆瓜操作github for window
- Fragment出现的重影问题
- hdu1290(平面分割空间)
- Objective-C利用正则表达式进行搜索时正则关键字的转义
- Fragment放置后台很久(Home键退出很长时间),返回时出现Fragment重叠解决方案
- Enhance application security with FORTIFY_SOURCE
- Python对象赋值、浅拷贝和深拷贝
- 随机函数 rand,srand,random,srandom 的区别与使用
- 6-16位数字或密码,判断方法。
- Android在一个APP中通过包名或类名启动另一个APP
- android ndk
- PHP缩略图 等比例无损压缩,可填充空白区域补充色
- cocos2d-x开发的《派对小游戏》-github源码分享