相关函数
1.onCreate(Bundle savedInstanceState)。activity 开始创建,一般在这个方法中初始化布局文件,数据等。
2.onStart()。activity 开始可见,但不能进行交互
3.onResume()。activity 在前台,可以进行交互。
4.onPause()。activity 可见但不能进行交互,不能做耗时的逻辑操作。一个 activity 启动另一个 activity B 时,当前 activity A的 onPause() 方法执行完之后才会执行另一个 activity B 的 onCreate -> onStart() -> onResume() 方法,然后又会执行 activity A 的onStop() 方法;当按下返回键时,activity B 的 onPause() 方法先执行,然后 activity A 的 onRestart() -> onStart() -> onResume() 方法会执行,之后 activity B 的 onStop() -> onDestroy() 会执行。
5.onStop()。activity 完全不可见。
6.onDestroy()。activity 销毁,可以做资源回收。
7.onRestart()。activity 重新启动,之后会调用 onStart().
相关 log 日志如下:
异常情况
1.系统配置更改。此情况下,会导致 activity 销毁并重新创建,系统会调用 onSaveInstanceState(Bundle outState) 方法保存当前 activity 的状态,相关的数据存放于 outState 中。这个方法会在 onStop() 方法执行前调用。activity 重新创建之后会调用 onRestoreInstanceState(Bundle savedInstanceState) 方法,相关的数据可以在这个 savedInstanceState 中 或者 onCreate( Bundle savedInstanceState) 的 savedInstanceState 中取到。系统默认会对一些 View 的状态进行了保存工作,即 View 实现了 onSaveInstanceState() 方法。
默认情况下,activity 切换全屏时会销毁并重建,可以通过配置 configChanges 这个属性的相关参数来保证 activity 不进行重建。
2.系统内存不足。此情况下,系统会按照优先级从低到高对 activity 进行回收。位于前台的 activity 优先级最高,可见但不可操作的 activity 次高(弹出dialog 时 背后的 activity),位于后台的 activity 最低(执行了onStop() 方法的 activity)。
与 Fragment 生命周期的联系
1. xml布局文件直接添加fragment:
2.通过 getSupportFragmentManager() 添加:
注:log() 方法统一放在生命周期函数的最后
总结:通过 xml 布局文件添加 fragment 时,fragment 先创建之后回调 activity 的相关生命函数。而通过 getSupportFragmentManager() 添加时,activity先创建(相当于 activity 先初始化之后再添加 fragment),之后再执行其他函数。而销毁的时候,都是 fragment 先 pause、stop 再到 activity pause、stop,然后 activity destroy 再到 fragment destroyview、destroy、detach。