Android点击Home键后fragment重新加载问题
现象:
同事的手机是OPPO-R9S,这个手机的垃圾回收真是吊炸天,activity中四个fragment,点击home键后再进入,显示退出时候的fragment,在切换其他fragment的时候,像是放在了下面不显示了,其他的手机没有发现这个问题
原因:
找了一些资料看,我觉得应该是,当Fragment长久不使用,系统进行回收,FragmentActivity调用onSaveInstanceState保存Fragment对象。很长时间后,再次打开app,系统恢复保存的Fragment,但是在FragmentActivity重新执行生命周期的时候,我们重新生成了fragment对象附加到该FragmentActivity,系统恢复的fragment和FragmentActivity失去关联,进而出错。
解决:
@Override
protected void onSaveInstanceState(Bundle outState) {
// super.onSaveInstanceState(outState);
}
管你保存什么,都直接创建fragment
这个方法是在onPause方法之前被调用的,因此如果一旦执行onpause,就会保存当前的状态信息,如果注释掉对应的方法则不会保存状态信息,当activity被系统回收的时候,在一个进程中再次启动activity也不会保存之前的状态信息。如在主界面启动了otherActivity,并等待了很久,当需要返回主界面的时候,主界面被销毁了,则时候就会执行oncreate(否则执行onResume),如果onsaveInstance有数据,则加载之前的数据(比如加载之前的fragment),但是此时有创建了新的fragment,于是,缓存的fragment就覆盖
当然这是暴力点,可以借鉴下面的第一条博客,但是比较麻烦,我认为是比较合理的。
借鉴博客:
http://blog.csdn.net/fan7983377/article/details/51889269
http://blog.csdn.net/u014316462/article/details/50190137
http://blog.csdn.net/wangyetongsss/article/details/51790279
更多相关文章
- android手机联网时会有什么系统广播发出呢??
- [置顶] Android系统的样式style
- Android实现一键复制粘贴,兼容低版本系统(api 11以下)
- 哪个移动系统适合程序员?
- android开发中调用系统中分享功能的方法
- [置顶] Android系统体系结构分析
- Android移动应用界面的模板化设计
- android4.0.4 系统默认值的修改
- Lance老师UI系列教程第三课->QQ登录注册界面的实现(android-2012