1、正常情况下的生命周期主要涉及四个场景
(1)Activity启动时
onCreate():可以做一些初始化操作,比如调用setContentView加载界面布局资源
onStart():activity处于用户可见的状态,但是还不能和用户进行交互(后台)
onResume():activity处于用户可见状态,可以与用户进行交互(前台)
(2)Activity从可见变为不可见(点击Home键时、打开另一个Activity)
onPause():表明Activity处于用户可见,不可交互的状态(对应于onResume)
onStop():表明Activity处于用户不可见,不可交互的状态(如果内存紧张,Activity会被回收)
(3)Activity从不可见变为可见(点击Home键返回主界面,再点击Launcher启动图标重新启动Activity)
onRestart():当Activity由不可见变为可见时调用
onStart():用户可见,不可交互
onResume():用户可见,可交互
(4)Activity退出时
onPause()
onStop()
onDestroy():Activity被回收销毁,资源被释放
2、异常情况下的生命周期
(1)系统配置改变导致Activity被杀死并重新创建(横竖屏切换时Activity会被销毁并重新创建)
由于系统配置导致Activity销毁属于异常情况下的异常情况下的销毁,系统会自动调用onSaveInstanceState()来保存销毁前的相关数据以便Activity重新创建时用于数据恢复,其中相关数据以Bundle对象存储;当Activity重新创建时,系统会把该Bundle对象传递给onRestoreInstanceState()和onCreate(),用户可以在这两个方法中获取Bundle对象进行数据恢复操作。
(2)系统内存不足导致优先级低的Activity被杀死
当系统内存资源不足的情况,系统会按照Activity优先级的高低杀死Activity,并会按照(1)的流程通过onSaveInstantState和onRestoreInstanceState来存储和恢复数据。
Activity的优先级高低如下:
1)前台Activity:正在与用于进行交互的Activity,优先级最高;
2)可见非前台Activity:可见但无法与用户交互的Activity;比如弹出一个对话框导致Activity可见但是无法与用户交互;
补充
1、当系统配置发生改变时,我们可以通过指定Activity的configChanges属性使Activity不被销毁并重新创建;
2、onSaveInstanceState()会在onStop()之前被调用;当Activity在异常情况下需要重新启动时,系统会默认保存当前Activity的视图结构,比如保存TextView的文本内容和文本选中状态、ListView的滚动位置等;