面试题:Activity跳转到另一个Activity过程中生命周期的变化情况

引言

  一般面试中总会问到Activity在跳转时的生命周期的变化情况,今天我们就来一篇文章解决它!让你在面试的时候不再手忙脚乱!

  看完答案后请认真看解析,因为知道答案不是我们的目的,往往能搞清楚为什么才更为重要,授人以鱼不如授人以渔的道理希望大家都能懂得。

生命周期(5种状态+7个方法)

5种状态

分别是:启动状态,运行状态,暂停状态,停止状态,销毁状态。

7个方法

onCreate():在Activity创建时调用。

onStart():在Activity即将可见时调用。

onResume():在Activity获取焦点开始与用户交互时调用,也就是可见时调用。

onPause():在当前Activity被其他Activity覆盖或锁屏时调用。

onStop():在Activity对用户不可见时调用。

onDestroy():在Activity销毁时调用。

onRestart():在Activity从停止状态再次启动时调用。

答案

(1)当前activityA启动时调用:

==>>onCreate: A

==>>onStart: A

==>>onResume: A

(2)跳转到另一个activityB时调用:

==>>onPause:A

==>>onCreate: B

==>>onStart: B

==>>onResume: B

==>>onStop: A

(3)返回activityA时调用:

==>>onPause: B

==>>onRestart: A

==>>onStart: A

==>>onResume: A

==>>onStop: B

==>>onDestroy: B

(4)关闭activityA,整个过程结束

==>>onPause: A

==>>onStop: A

==>>onDestroy: A

解析

第一:每个Activity中onCreate()方法只调用一次,就是创建它的时候调用,直到它被销毁。

第二:通常onStart()和onResume方法连起来调用,因为一个时即将可见时被调用,一个是可见时被调用。

第三:当跳转到activityB时,总是要等到前一个activityA的onPause()方法调用完成,A进入停止状态后,才能创建和
执行activityB。

第四:当跳转到前一个activityA时,总是要等到当前activityB的onResume方法执行完后才会返回前一个activityA的生
命周期继续执行。

第五:当从其他activityB返回当前activityA时,不再调用onCreate()方法,而是调用onRestart()方法,且总是要在在onSart()之前就被调用。

第六:当一个activityB的生命周期结束,因为它并没有其他操作,是由A唤醒创建并返回A,所以当activityA再次对于用户处于可见时,activityB从可见态变化为停止状态调用:onStop(),再变为销毁状态调用:onDestroy()。

第七:当一个activity的生命周期结束,它需要从执行状态变为停止状态,再变为销毁状态,回收内存(activityA)。

面试官追问:为什么不先调用前一个activityA的onStop()方法后再执行activityB的方法???

答:因为有时候在onStop()方法中需要执行一些耗时操作,假设onStop()先被调用,那么要跳转到B就必须要等待A的任务执行完,影响页面的跳转,所以先onPause()等B一系列方法执行完后再调用A的onStop()方法。

Tips:
(1)有时候 Activity的重建,会在 onStop方法中 保存数据 这也是个耗时操作;
(2)系统也是这样设计的。startActivity流程中,先执行任务栈顶Activity的onPause(),在执行目标Activity的 onCreate onStart onResume 然后在执行 之前Activity的onStop

图示

生命周期变化.png

你可能感兴趣的:(面试题:Activity跳转到另一个Activity过程中生命周期的变化情况)