Activity State Changes
用户触发或者系统触发的不同事件,可以导致Activity从一个状态转换到另一种状态,本文档描述通用的转换,以及如何处理这些转换。
Configuration change occurs
有许多事件可以触发配置的改变,最突出的例子就是,portrait和landscape orientations。其他的比如语言和输入设备。
当配置发生改变,Activity会销毁并重新创建,如果想保存Activity状态的话需要重写onSaveInstanceState()方法保存数据,并在onCreate()或者onRestoreInstanceState()方法重新恢复应用状态。
Handling multi-window cases
当应用程序进入多窗口模式,在Android7.0(API24)及更高版本中可用,系统会通知当前运行的Activity配置更改,从而进行上述生命周期转换。如果已经处于多窗口模式的应用程序以调整大小,则也会发生此类行为。你的Activity可以自己处理配置更改,或者可以允许系统销毁Activity并使用新的维度重新创建。在多窗口模式下,尽管用户可以看到两个应用程序,但只有用户交互的应用程序处于前台并具有焦点。该Activity处于onResume()状态,而另一个窗口中的应用程序处于onPause()状态。 当用户从应用A切换到应用程序B时,系统会在app A上调用onPause() 和在app B上调用onResume(),当用户在应用之间切换时,会在这两种方法之间切换。
Activity or dialog appears in foreground
当一个新的Activity或者dialog 出现前台,获得焦点并部分覆盖正在运行的Activity。被覆盖的activity失去焦点并调用onPause()方法。当他回到前台并且重新获得焦点则系统会掉用onResume()方法。如果新的activity完全覆盖正在运行的activity,则被覆盖的activity会调用onPause()和onResume()方法。
当被覆盖的activity重新恢复到前台,系统会依次调用onRestart(),onStart(),以及onResume()方法。如果被覆盖的activity在回到前台时,创建新的实例,则该新的activity不再调用onReStart()方法,而是直接调用onStart(),onResume()方法。
备注:但用户点击home键,系统的动作就像完全覆盖正在运行的activity一样。