异常情况下的生命周期

当资源相关的系统配置(比如横竖屏切换)发生改变导致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方法来存储和恢复数据。

系统默实现了控件的缓存状态,可以保存和恢复一些数据,至于每种控件会缓存和恢复哪些数据,我们可以通过查看源码来发现。

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器