在类似旋转屏幕动作等异常情况下,Activity会被销毁后重建。
在销毁的时候onPause onStop onDestory 都会被调用,而且系统会在onStop之前调用onSaveInstanceState来保存当前的Activity,我们可以在这个方法中保存一些有用的数据。
重建之后,系统会调用onRestoreInstanceState,把之前保存的Bundle对象作为参数传递给onRestoreInstanceState和onCreate我们就可以取出之前保存的数据并恢复。
同时onSaveInstanceState ,onRestoreInstanceState中,系统自动为我们恢复了了一些数据,比如视图结构,listview的滚动位置,等。。。每一个View都有这两个方法。可以查看源码。
活动被回收前 数据的保存与恢复
常见问题,活动onStop()->app process killed->onCreate(),切回上一个Activity发现由于被回收过,导致之前的数据丢失。。。
Activity中加入OnSaveInstanceState(Bundle参数)回调方法,会保证在回收前调用,可以保存数据,Bundle参数.putString(“key”,value);
然后在onCreate()中加入恢复数据方法 Bundle参数.getString(“key”);
那么如何避免被销毁重建呢? 在AndroidMenifest.xml中activity标签内的configChanges属性中选择某些值。代表在这个时候不会重建,比如android:configChanges="orientation|screensize" android:configChanges="locale"//系统本地位置发生了变化,一般指系统切换了语言 android:configChanges="keyboardHidden" 然后在Activity的onConfugChanged方法中去处理系统配置的变化。
