Android学习路线_入门篇(三)Acitvity生命周期与启动模式

Android应用开发中核心的四大组件是整体应用的骨架,利用好四大组件才能搭建出一个合理高效的APP。简单了解了Activity之后,我们还需要再深入一下Activity的生命周期与启动模式。

本文已收录至☞Android学习路线_梳理
上一篇☞Android学习路线_入门篇(二)四大组件之Acitvity
下一篇☞Android学习路线_入门篇(四)四大组件之Service

1. Activity的生命周期

生命周期是指组件的实例对象从创建到销毁可能会被系统调用的一些方法,每个方法的调用都有特定的条件,可以根据需要重写生命周期方法来达到在某些特定时刻执行特定任务的目的。生命周期方法不建议自行调用,应由系统管理。

1.1 生命周期一览

首先需要奉上一张图片:
Activity生命周期
通过这张图片我们可以看到整个Activity的生命周期流程,同时在这个流程运行的过程中存在一个状态转换的现象:
Activity状态转换
Activity在生命周期中,经历过各个生命周期方法时,它的状态也在Created、Started、Resumed、Paused、Stopped、Destroyed这六个状态中转变。

1.2 生命周期方法

相信你已经注意到了,流程中有很多方法,那些方法被称作生命周期方法。生命周期方法大多是成对出现的:

  1. onCreate()onDestroy(),生命的起始与终结。
  2. onStart()onStop(),界面的可见与否。
  3. onResume()onPause(),是否可进行交互。

详细了解一下各个生命周期方法:

  1. onCreate():第一个调用的方法,通常在该方法中加载布局文件、初始化资源、注册事件与BroadcastReceiver等较重的任务。
  2. onStart():在onCreate()方法后调用,通常在该方法中处理UI的显示控制逻辑,任务不可过重,用户此时无法交互也无法直接看见当前Activity
  3. onResume():在onStart()方法后调用,通常在该方法中进行简单的数据处理与UI控制,如开始动画,只执行轻量任务,方法执行后用户可进行交互并可直接看见当前Activity。此时,当前Activity进入Resumed状态(运行状态),当一个Paused状态的Activity重新位于栈顶时(从其他Activity返回),会再次调用该方法。
  4. onPause():当前Activity被其他Activity覆盖时调用,让当前Activity进入Paused状态(暂停状态),此时当前Activity可见但不可交互。通常在此方法中进行简单的数据处理与UI控制,如暂停动画,只执行轻量任务。内存不足且无其他优先级更低的Activity时,当前Activity可能会被销毁。当前Activity重新位于栈顶时(从其他Activity返回),会调用onResume()方法。
  5. onStop(): 当前Activity被其他Activity完全覆盖(若上层Activity透明或半透明时,只调用onPause()方法)时调用,当前Activity进入Stopped状态(停止状态),当前Activity不可见。通常在此方法中处理UI的显示控制逻辑,任务不可过重。内存不足且无其他优先级更低的Activity时,当前Activity可能会被销毁。还行当前Activity重新位于栈顶时(从其他Activity返回),会调用onRestart()方法。
  6. onRestat(): 当一个Stopped状态的Activity被返回时,该方法被调用,之后再调用onStart()方法和onResume()方法进入运行状态。
  7. onDestroy(): 当前Activity被销毁时调用,通常在该方法中用来执行释放资源等较重的任务。

2. Activity的启动模式

Activity的启动模式总共有四种,在AndroidManifest文件中通过<activity>标签的launchMode属性来指定启动模式,不指定的情况下是默认的Standard标准模式。

2.1 启动的模式

  1. Standard:标准模式,Activity的默认启动模式。在这种模式下,Activity可以有多个实例,每次启动Activity,无论任务栈中是否已经存在这个Activity的实例,系统都会创建一个新的Activity实例。
  2. SingleTop:栈顶模式,栈顶Activity复用的模式。当一个SingleTop模式的Activity已经位于栈顶时,再去启动它则不再创建新的实例;如果不在栈顶,无论任务栈中是否已经存在这个Activity的实例,系统都会创建一个新的Activity实例。
  3. SingleTask:单任务模式,栈内Activity复用的模式。如果启动的Activity已经存在于任务栈中,则会将此Activity上层的其他Activity出栈,使此Activity位于栈顶;否则创建一个新的Activity实例。
  4. SingleInstance:单实例模式。在该模式下,系统会启动一个新的栈来管理该Activity,不同应用之间可以共享该Activity

2.2 两个Activity跳转时的生命周期

常见的场景就是两个Activity跳转,如A跳转到B,此时A和B的生命周期交织在一起,并不是简单的A执行完所有的生命周期再从头执行B的生命周期。

  1. 当B无实例,且不是透明或半透明时:A.onPause() > B.onCreate() > B.onStart() > B.onResume() > A.onStop()。
    此时从B返回A:B.onPause() > A.onRestart() > A.onStart() > A.onResume() > B.onStop() > B.onDestroy()。
  2. 当B无实例,且为透明或半透明时:A.onPause() > B.onCreate() > B.onStart() > B.onResume()。
    此时从B返回A:B.onPause() > A.onResume() > B.onStop() > B.onDestroy()。

透明的B将导致A被B覆盖时不执行A.onStop()方法,B返回A时也不执行A.onRestart() > A.onStart()这两个方法。接下来的就不考虑透明的情况了,举一反三。

  1. 当B有实例,B为SingleTop模式,且B位于栈顶(B不位于栈顶时相当于无实例,参考1、2两点):此时A不在栈顶,其生命周期并不执行,B无生命周期变化,但系统会调用B.onNewIntent()方法告知B接收到了新的Intent。
  2. 当B有实例,B为SingleTask模式:A.onPause() > B.onRestart() > B.onStart() > B.onNewIntent() > B.onResume()(onNewIntent()与onResume()无确定先后顺序,位置可能交换)> A.onStop() > 原本栈内位于B之上的Activity进入销毁流程。

完毕

今天的分享就到这里,文章多有不足,各位小伙伴有什么想法可以直接评论或是私信,要是对你有所帮助就给我一个赞吧,喜欢我的小伙伴可以关注我哦~

本文已收录至☞Android学习路线_梳理
上一篇☞Android学习路线_入门篇(二)四大组件之Acitvity
下一篇☞Android学习路线_入门篇(四)四大组件之Service

支持我的小伙伴们可以微信搜索“Android思维库”,或者微信扫描下方二维码,关注我的公众号,每天都会推送新知识~
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值