异常情况下的生命周期
系统配置发生改变导致Activity被KILL
在类似旋转屏幕动作等异常情况下,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”);
资源不足导致的优先级低的被杀死
- 前台
- 可见
- 后台
内存不足的时候,就会从优先级别低的Activity开始杀死其进程。所以后台应该在service中运行,而尽量避免被杀死。
那么如何避免被销毁重建呢?
在AndroidMenifest.xml中activity标签内的configChanges属性中选择某些值。代表在这个时候不会重建,比如android:configChanges="orientation|screensize"
android:configChanges="locale"//系统本地位置发生了变化,一般指系统切换了语言
android:configChanges="keyboardHidden"
然后在Activity的onConfugChanged方法中去处理系统配置的变化。