前段时间项目中出现了个Bug,就是手动禁止运行的程序的权限,之后再返回APP,APP会重启一次,之后再禁止权限,再返回APP,程序中保存的数据就会被清空;
造成此问题的原因是手动禁止了APP权限再回到页面上,系统将旧的进程杀死,再开启一个新的进程,新进程中的activity栈信息与旧进程相同,但是页面跳转时还是需要重新走oncreate方法(一个参数的),同时还需要注意,旧进程被杀死了,所以存储的全局变量之类的数据都被清空了,在新进程中对应的全局变量都清空了。
今天看 http://www.runoob.com/w3cnote/android-tutorial-activity.html 中介绍了
android:persistableMode="persistAcrossReboots"
:persistableMode="persistAcrossReboots"
这个属性,说是使Activity具有持久化能力的属性,需要配合使用
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState)
public void onRestoreInstanceState(Bundle savedInstanceState, PersistableBundle persistentState)
void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState)
public void onRestoreInstanceState(Bundle savedInstanceState, PersistableBundle persistentState)
在Manifest.xml文件中需要持久化的Activity标签内添加persistableMode属性,之后在Activity中的在onSaveInstanceState方法中进行保存数据,之后在onRestoreInstanceState和onCreate(两个参数的那个)进行取值,和做想要进行的操作。将需要的全局变量使用onSaveInstanceState进行保存,在onRestoreInstanceState方法中取出。为了简便可以在BaseActivity中实现。
实验出来的是APP进行重启了,还是不够完美,但是不会是空白页了。
希望各位走过路过的大神,有什么解决此问题的方案,可以指点下。
要是错了,也欢迎指出,感谢感谢~~