上图是大家再熟悉不过的正常情况下的activity生命周期各个阶段中对应函数的调用顺序。那么,当涉及到两个activity跳转时,生命周期函数的调用又是按照怎样的顺序进行依次调用的呢?本文通过写两个简单的activity(FirstActivity和SecondActivity),执行从前者到后者的跳转,然后再执行返回,打印出两个activity生命周期函数的调用顺序。
1)FirstActivity---->SecondActivity
01-23 15:32:04.799 22126-22126/com.example.lenovo.testdemo I/FirstActivity: ---> onCreate
01-23 15:32:04.805 22126-22126/com.example.lenovo.testdemo I/FirstActivity: ---> onStart
01-23 15:32:04.808 22126-22126/com.example.lenovo.testdemo I/FirstActivity: ---> onResume
01-23 15:39:04.733 22126-22126/com.example.lenovo.testdemo I/FirstActivity: ---> onPause
01-23 15:39:04.763 22126-22126/com.example.lenovo.testdemo I/SecondActivity: ---> onCreate
01-23 15:39:04.764 22126-22126/com.example.lenovo.testdemo I/SecondActivity: ---> onStart
01-23 15:39:04.766 22126-22126/com.example.lenovo.testdemo I/SecondActivity: ---> onResume
01-23 15:39:05.264 22126-22126/com.example.lenovo.testdemo I/FirstActivity: ---> onStop
由此可见,当执行activity跳转时。正常情况下,必须前一个activity调用onResume函数后,后面的activity才会执行生成。而后一个activity调用onResume函数时,前一个activity的onStop函数才开始调用。这就说明onResume函数的维持的时间比较短暂,所以我们尽量不要在这个函数里面做一些重的、耗时比较多的任务。onStop函数维持时间相对长一些,我们可以在这里面做一些相对来说任务重一点的工作,但是耗时也不可过长。
2)SecondActivity---->FirstActivity(返回时Log信息如下)
01-23 15:39:31.928 22126-22126/com.example.lenovo.testdemo
I/SecondActivity: ---> 按下返回键
01-23 15:39:31.928 22126-22126/com.example.lenovo.testdemo I/SecondActivity: ---> onPause
01-23 15:39:31.947 22126-22126/com.example.lenovo.testdemo I/FirstActivity: ---> onRestart
01-23 15:39:31.947 22126-22126/com.example.lenovo.testdemo I/FirstActivity: ---> onStart
01-23 15:39:31.948 22126-22126/com.example.lenovo.testdemo I/FirstActivity: ---> onResume
01-23 15:39:32.423 22126-22126/com.example.lenovo.testdemo I/SecondActivity: ---> onStop
01-23 15:39:32.424 22126-22126/com.example.lenovo.testdemo I/SecondActivity: ---> onDestroy
从Log信息上,我们可以看到只有当前activity函数onPause方法调用之后,次栈顶的activity才会开始执行返回的相关操作。并且,需要返回的函数的onResume方法调用后,前者的stop方法才开始调用。