Activity作为一个控件有其自己完整的生命周期,在各个不同状态下调用不同的生命周期函数。因此,了解并掌握Activity的生命周期是保证我们程序正常合理运行的前提。
Activity共有7个生命周期函数,分为4个状态。
- 7个周期函数
onCreate(),onStart(), onResume(),onPause(),onStop(), onRestart(), onDestroy() - 四种状态
活动状态,暂停状态,停止状态,销毁状态
上边的Activity生命周期图完整的显示了Activity被调用的顺序和时机。
1. onCreate()
当Activity被创建时调用,只会被调用一次,可以做一些资源,空间的初始化的工作。
2. onStart()
当Activity启动时被调用。
3. onResume()
当Activity恢复时被调用,onStart()方法后边一定会调用,onResume(),常用于恢复Activity之前的工作状态。
4. onPause()
当Activity被暂停时调用。比如当Activity_A已经启动了,但是又启动了Activity_B,这时Activity_A会调用此方法。常用于保存Activity的工作状态。在内存不够时容易被回收。
5. onStop()
当Activity被停止时调用。当Activity 被新启动的Activity长时间覆盖,变得不完全不可见时会从暂停状态转变为停止状态。在该状态下的Activity当内存不够时会被优先回收。
6. onRestart()
当Activity重新启动的时候被调用。指该Activity从停止状态获取到焦点转变到活动状态时调用该方法。
7. onDestroy()
当Activity被销毁是调用,可以做一些资源的释放等的工作。
正常启动一个Activity时打印的日志
跳转到另一个Activity时打印的日志
失去焦点,Activity不可见时打印的日志
重新获取焦点时打印的日志
从活动状态被手动的kill掉时打印的日志
在后台被kill掉时打印的日志
这就是Activity基本的生命周期函数及其四种状态的转换和调用。
异常情况下的Activity生命周期:
当Activity不是正常的结束生命周期,而是发生意外情况时生命周期也是不同的,多了一个状态的保存和恢复:
onSaveInstanceState()和onRestoreInstanceState()方法而且这两个方法也是只有当Activity还有可能再次回到前台时才会调用。
首先说一下什么叫发生意外情况:就是当Activity的配置信息发生变化时,例如由竖屏切换为横屏这种情况。
举例(横竖屏切换):
当由竖屏切换为横屏时,首先Activity会被销毁,因为只是切换屏幕方向,所以有可能会回到前台,所以在调用onStop()方法之前,会调用onSaveInstanceState()方法来进行数据的保存,然后销毁当前的Activity。接着会重新创建一个Activity实例,并在调用onResume方法之前调用onRestoreInstanceState()方法来恢复数据。
onPause()和onSaveInstanceState()的区别:
- onPause()方法是Activity生命周期中的方法,只要是当Activity处于暂停装态时就会被调用,而onSaveInstanceState()只有当Activity异常终止情况下才会被调用。
- onSaveInstanceState()和onPause()的调用顺序没有关联,可能在其之前也可能在其之后。
onRestoreInstanceState(Bundle savedInstanceState)和onCreate(Bundle savedInstanceState)的区别:
- 在onResStoreInstanceState中可以保证传入的bundle数据一定是非空的,不必进行非空判断,而在onCreate中,bundle数据可能为空(Activity正常启动)