Activity生命周期的一些场景流程总结

熟悉安卓界面的小伙伴们应该都知道activity的生命周期,分别是onCreate、onStart、onResume、onPause、onStop、onDestroy、onRestart,我们今天主要是来一起看看常见场景下activity生命周期的调用流程。以android12 api31的手机为例

场景1:正常界面的启动

        onCreate -> onStart -> onResume

场景2:先从A界面跳转到B界面

        A onPause -> B onCreate -> B onStart -> B onResume -> A onStop -> A onSaveInstanceState

        再从B界面返回到A界面

        B onPause -> A onRestart -> A onStart -> A onResume -> B onStop -> B onDestroy

场景3:当前界面按下锁屏键

        onPause -> onStop -> onSaveInstanceState

        再打开屏幕

        onRestart -> onStart -> onResume

场景4:当前界面按下HOME键

        onPause -> onStop -> onSaveInstanceState

        再点击任务键或桌面直接打开此应用

        onRestart -> onStart -> onResume

场景5:当前界面按下任务菜单键

        onPause -> onStop -> onSaveInstanceState

        再点击清除杀掉此进程

        什么周期也没走

场景6:当前界面按下任务菜单键

        onPause -> onStop -> onSaveInstanceState

        然后点击应用再次进入

        onRestart -> onStart -> onResume

场景7:横竖屏切换(未配置configChanges)

        onPause -> onStop -> onSaveInstanceState -> onDestroy -> onCreate(savedInstanceState不为空) -> onStart -> onRestoreInstanceState -> onResume

场景8:横竖屏切换(配置configChanges="orientation|screenSize")

        onConfigurationChanged

注:

1.横竖屏切换一些注意事项:

Activity的AndroidManifest.xml中设置android:configChanges

1)不添加configChanges = orientation = keyboardHidden = screenSize = orientation|keyboardHidden = keyboardHidden|screenSize,切换横竖屏过程中生命周期是相同的

2)orientation|screenSize,横竖屏切换不不会重新调用各个生命周期,只会执行onConfigurationChanged方法

3)自从Android3.2(API13), 在设置Activity的 android:configChanges="orientation |keyboardHidden"后,还是一样会重新调用各个生命周期的。因为screensize也开始跟着设备的横竖切换而改变。

4)Android3.2(API13)之前:

        (1)不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次

        (2)设置Activity的android:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次

        (3)设置Activity的android:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法

2.onSaveInstanceState方法

在某种时机下,Activity会调用onSaveInstanceState方法通过保存Bundle参数来保存当前的Activity的数据。onSaveInstanceState方法总是会在onStop后调用。

发生以下等情况会被调用:

        按下HOME键切到后台时

        锁屏时(按下电源键或自动锁屏)

        从该Activity中启动一个新的Activity时

        横竖屏切换时 (前提是Activity的configChanges属性配置了orientation)

3.onRestoreInstanceState方法

当Activity被重新创建(横竖屏切换,或者被系统强杀重启后的重新创建)之后就会调用onRestoreInstanceState,而它的Bundle参数,就是onSaveInstanceState方法保存的。onRestoreInstanceState这个方法会在onStart后调用。

发生以下等情况会被调用:

        Activity在后台的情况下,被系统强杀了,再次打开Activity时

        横竖屏切换时 (会走activity生命周期的情况)

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值