知识点(1)——Android中Activity的生命周期,以及两个Activity之间跳转所经历的生命周期

本文深入解析Android中Activity的生命周期,包括从FirstActivity跳转至SecondActivity的生命周期变化,以及屏幕旋转时Activity的生命周期调用流程。同时,文章还探讨了onSaveInstanceState与onRestoreInstanceState的调用时机。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、相信各位Android开发的同胞,提起Activity的生命周期,大家再熟悉不过了,而且也是每次面试被频繁问及的知识点。虽然比较简单,但是在这里,我还是要帮大家回忆一下,以免觉得简单,等被问及的时候,忘记了,就懵逼了!!

废话不多说,上图:

Activity生命周期图

大家看到,这幅图,应该会比较熟悉,因为这张图太经典了。

二、下面我就接着,给大家加深一下记忆,也是自己再面试中,实际被问到过的:

就是如果有两个Activity,FirstActivity和SecondActivity。这时,如果从打开FirstActivity开始,然后从FirstActivity跳转到SecondActivity,再把SecondActivity关闭,到FirstActivity。这其中经历的生命周期?

我们在这里,把这个操作分为两步:

第一步,从打开FirstActivity,到跳转到SecondActivity。

第二步,关闭SecondActivity,回到FirstActivity。

(1)首先,从打开FirstActivity到跳转到SecondActivity,所经历的生命周期(【】中为哪个Activity的生命周期函数):

onCreate【FirstActivity】——>onStart【FirstActivity】——>onResume【FirstActivity】——>onPause【FirstActivity】——>onCreate【SecondActivity】——>onStart【FirstActivity】——>onResume【FirstActivity】——>onStop【FirstActivity】。

好了到这里,已经跳转到SecondActivity,在这里,我自己也实际写代码,确认了一下:

得到的结果是:

(2)第二步,从SecondActivity回到FirstActivity:

onPause【SecondActivity】——>onRestart【FirstActivity】——>onStart【FirstActivity】——>onResume【FirstActivity】——>onStop【SecondActivity】——>onDestory【SecondActivity】。

好了,到这里,第二步的生命周期也回调完毕。

小结

综上所述,整个过程所经历过的生命周期函数顺序依次是:

onCreate【FirstActivity】——>onStart【FirstActivity】——>onResume【FirstActivity】——>onPause【FirstActivity】——>onCreate【SecondActivity】——>onStart【SecondActivity】——>onResume【SecondActivity】——>onPause【SecondActivity】——>onRestart【FirstActivity】——>onStart【FirstActivity】——>onResume【FirstActivity】——>onStop【SecondActivity】——>onDestory【SecondActivity】。

三、将手机屏幕切换成横屏时当前Activity所执行的生命周期

(1)当AndroidManifest里面未设置android:configChanges时

由竖屏切换为横屏:

onPause->onStop->onSaveInstanceState->onDestory->onCreate->onStart->onRestoreInstanceState->onResume

其中onSaveInstanceStateonRestoreInstanceState是两个重要的回调函数。当Activity异常退出时,系统调用onSaveInstanceState()来保存Activity的当前状态。同样的,当该Activity重新创建时,会调用onRestoreInstanceState()来恢复之前的状态。

由横屏切换成竖屏:onPause->onStop->onSaveInstanceState->onDestory->onCreate->onStart->onRestoreInstanceState->onResume

(2)如果配置了android:configChanges="orientation",同上

(3)如果配置了android:configChanges="orientation| screenSize"

通过在AndroidManifest里面配置android:configChanges,来避免横竖屏时Activity重走生命周期。

此时横屏切换为竖屏 以及 竖屏切换为横屏时,都只会执行一次onConfigurationChanged方法。

四、关于onSaveInstanceState(Bundle outState)与onRestoreInstanceState

1、onSaveInstanceState的调用时机

  • 当用户按下HOME键
  • 从最近应用中选择运行其他的程序时
  • 按下电源键(关闭屏幕显示)时
  • 从当前activity启动一个新的Activity时
  • 屏幕方向切换时(无论竖屏切横屏还是横屏切竖屏都会调用)

Activity的onSaveInstanceState回调时机,取决于app的targetSdkVersion:

targetSdkVersion低于11的app,onSaveInstanceState方法会在Activity.onPause之前回调;

targetSdkVersion低于28的app,则会在onStop之前回调。

targetSdkVersion大于28,onSaveInstanceState在onStop回调之后才回调。

2、onRestoreInstanceState什么时机调用

onRestoreInstanceState(Bundle savedInstanceState)只有在activity确实是被系统回收,重新创建Activity的情况下才会被调用。

  • 屏幕方向切换时(无论竖屏切横屏还是横屏切竖屏都会调用)
  • 由于内存紧张导致后台运行的程序被kill掉时

好了,到这里就结束了。菜鸟一个,有不足或者错误的地方,希望大家能评论留言帮我指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值