Activity生命周期与启动模式

2017-12-03  本文已影响0人  Android天之骄子

典型情况下的生命周期

在正常情况下,Activity会经历如下生命周期。如图


activity_lifecycle.png

注意:如果系统在紧急情况下必须回收内存,则可能不会调用onStop()onDestroy(),因此,应该在onPause() 向存储设备写入至关重要的持久性数据(例如用户编辑)。但是不能太耗时,因为该方法中的任何阻止过程都会妨碍向下一个 Activity 的转变并拖慢用户体验。


特定情况下Activity生命周期


保存 Activity 状态

当系统配置发生改变或优先级高的应用需要内存时,Activity有可能会被销毁,其中onPauseonStoponDestory会被调用,或异常情况下系统会先调用 onSaveInstanceState(),然后再使 Activity销毁。系统会向该方法传递一个Bundle,可以在其中使用putString()putInt() 等方法以名称-值对形式保存有关 Activity 状态的信息。然后,如果系统终止应用进程,并且用户返回Activity,则系统会重建该 Activity,并将Bundle 同时传递给onCreate()onRestoreInstanceState()。可以使用上述任一方法从Bundle 提取保存的状态并恢复该 Activity 状态。如果没有状态信息需要恢复,则Bundle 是空值(如果是首次创建该 Activity,就会出现这种情况)。

restore_instance.png

注意:无法保证系统会在销毁Activity 前调用onSaveInstanceState(),因为存在不需要保存状态的情况(例如用户使用“返回”按钮离开Activity 时,因为用户的行为是在显式关闭 Activity)。如果系统调用 onSaveInstanceState(),它会在调用onStop() 之前,并且可能会在调用onPause() 之前进行调用,(顺序不一定)

不过,我们也要知道不过,即使什么都不做,也不实现 onSaveInstanceState()ActivityonSaveInstanceState()
默认实现也会恢复部分 Activity 状态。具体地讲,默认实现会为布局中的每个View 调用相应的 onSaveInstanceState()
方法,让每个视图都能提供有关自身的应保存信息。Android 框架中几乎每个小部件都会根据需要实现此方法,以便在重建 Activity 时自动保存和恢复对 UI 所做的任何可见更改。例如,EditText 控件保存用户输入的任何文本,CheckBox 控件保存复选框的选中或未选中状态。只需为想要保存其状态的每个控件提供一个唯一的 ID(通过android:id 属性)。如果控件没有 ID,则系统无法保存其状态。


系统配置发生改变后的生命周期

当系统配置发生改变后,Activity实例可以重新创建,也可以不重新创建,如果不想重新创建,可以在清单文件<activity>标签下设置android:configChanges属性,比如不想屏幕方向改变后重新创建,那么就设置android:configChanges="orientation",该属性声明配置将阻止 Activity 重新启动。 Activity 反而会保持运行状态,并且系统会调用其onConfigurationChanged()方法。其中常用的属性有

上一篇 下一篇

猜你喜欢

热点阅读