异常情况下的生命周期
当资源相关的系统配置(比如横竖屏切换)发生改变导致Activity被重新创建。
当发生横竖屏切换的时候,系统会销毁现在的Activity并重新创建,在销毁Activity的时候onSaveInstance方法会被调用,我们可以在onSaveInstance方法中保存当前Activity的相关的数据,在重新创建Activity的时候可以在onCreate方法或者onRestoreInstance方法中恢复相关数据。
onSaveInstance方法在onStop方法之前被调用;
onRestoreInstance方法在onStart方法之后被调用;
可以在onCreate方法或者在onRestoreInstance方法中恢复数据,两者的区别是,一旦onRestoreInstance方法被调用,bundle一定不为空,官方文档推荐在onRestoreInstance方法中恢复数据。
注意:
- onSaveInstance方法并不会在Activity每次离开前台的时候都会被调用,如果用户调用了finish方法,onSaveInstance方法则不会被调用。
- onSaveInstance方法和onRestoreInstance方法并不一定会成对出现,只有当Activity确实被异常终止的并恢复的时候onRestoreInstance方法才会被调用。
会引起onSaveInstance方法方法被调用的操作:
当系统内存不足的时候会杀死低优先级的Activity
Activity的优先级分为
- 前台Activity
- 可见Activity
- 后台Activity
当系统内存不足的时候会按优先级回收Activity,并在后续通过onSaveInstance方法和onRestoreInstace方法来存储和恢复数据。
系统默实现了控件的缓存状态,可以保存和恢复一些数据,至于每种控件会缓存和恢复哪些数据,我们可以通过查看源码来发现。