当Android程序长期在后台运行再打开的时候fragment重新加载问题

xiaoxiao2021-02-28  72

当应用在点击Home键时,会调用onSaveInstanceState方法,随后是OnStop方法,如果需要缓存数值,就保存在onSaveInstanceState方法中,如果是长期保存的数值,就需要保存在OnStop方法中。当需要获取数值的时候,可以在OnResume方法中获取,或者在onCreate中获取。有人会问,这两者有什么区别呢?首先,在应用关闭后再次打开时(短时间内),oncreate是不会被调用的,做开发的都知道,oncreate只在第一次加载的时候调用,所以一般在点击Home键切换到后台时,调用顺序是onSaveInstanceState、onPause、onStop,再次打开时:onRestart、onStart、onResume之后Activity继续运行,但是当Home被点击后(长期时间),这时候再次打开时:oncreate、onRestart、onStart、onResume;这就是两者的区别

解决办法:

在MainActivity里重写onSaveInstanceState方法,但不做实现,也就是将super.onSaveInstanceState(outState)注释掉.

并且在重新加载Oncreate方法时做出判断,如果为空,说明是刚刚打开应用,正常加载fragment,如果不为空,说明Activity曾经被回收,这时候的fragment需要重新加载,具体代码如下:

if (savedInstanceState != null) { manager = getSupportFragmentManager();//重新创建Manager,防止此对象为空 manager.popBackStackImmediate(null, 1);//弹出所有fragment }

manager不重复冲突,至此问题终于解决,也就是在用户Home点击切换到后台,长期不使用的情况下,再次打开重新加载应用.

转载请注明原文地址: https://www.6miu.com/read-72135.html

最新回复(0)