Android点击Home键后fragment重新加载问题

来源:互联网 发布:win7ipv6网络访问权限 编辑:程序博客网 时间:2024/06/05 18:50

现象:

同事的手机是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



0 0