Activity生命周期函数调用顺序——从A跳转至B后,在B中按下返回键

之前面试被问过这样一个问题

ActivityA中点击按钮跳转至ActivityB,之后在ActivityB界面中按下Back(返回)键,描述整个过程的生命周期函数调用情况。

面试完之后就自己写了个小Demo来详细了解一下。项目里有两个Activity:MainActivity和ActivityTwo;MainActivity中有一个按钮可跳转至ActivityTwo。

以下是启动应用后的Log信息:
Activity生命周期函数调用顺序——从A跳转至B后,在B中按下返回键
从ActivityA 启动 ActivityB的生命周期:
A.onCreate —> A.onStart —> A.onResume —>A.onPause —>B.onCreate —> B.onStart —> B.onResume—> A.onSaveInstanceState —> A.onStop

可能跟我们料想的结果不太一样,我之前也以为是先将A销毁后再启动B,结果却是在A.onPause执行后就开始创建并初始化B了。具体的启动流程需要看源码才能知晓,这里不做说明。
Activity生命周期函数调用顺序——从A跳转至B后,在B中按下返回键
按下Back键:
B.onPause —>A.onRestart—>A.onStart —> A.onResume -->B.onStop ---- >B.onDestroy

附上一张较为详细的Activity生命周期图:
Activity生命周期函数调用顺序——从A跳转至B后,在B中按下返回键

另外,我发现在A启动B时会调用A的onSaveInstanceState 方法,而在B中按下返回键却不会调用该方法。

于是我查阅了官方文档,官方文档中说的是“当用户显式关闭 Activity 时,或者在其他情况下调用 finish() 时,系统不会调用 onSaveInstanceState()”。Back键的作用是将当前 Activity 将从堆栈中退出并销毁。