引言
一般面试中总会问到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