妈妈不担心系列之Activity的生命周期

本文为个人学习笔记分享,没有任何商业化行为,对其他文章的引用都会标记。如有侵权行为,请及时提醒更正!如需转载请表明出处

面试的时候我们总会被问到Activity的生命周期。我去呀,那么多怎么记得住呀,今天这一篇是妈妈不担心系列的首篇,通过一些细节的讲解,面试的时候可以再也不用担心面试官问生命周期了。

带着问题去看Activity可以更加方便我们去理解它。
问题1 正常情况下Activity的生命周期
问题2: AActivity启动BActivity,他们的生命周期?
问题2:透明主题的Activity生命周期
问题3:异常情况下Activity的生命周期(Configuration发生改变)
问题4:多进程启动Activity的生命周期
问题5: 不同启动模式下Activity的生命周期

简单介绍一下Activity的生命周期方法
(1) onCreate:表示Activity正在被创建,这是生命周期的第一个方法。在这个方法中,我们可以做一些初始化工作,比如调用setContentView去加载布局文件,初始化Activity所需的数据。
(2)onRestart:表示Activity正在重启。一般情况下,当当前Activity从不可见变为可见状态时,onRestart就会被调用。这种场景一般是用户行为导致的,比如用户按Home键切换到桌面,或者打开一个新的Activity,这时当前的Activity就会暂停,也就是onPause和onStop会被调用,接着用户又回到这个Activity,就会出现这种情况。
(3)onStart:表示Activity正在被启动,即将开始,这时Activity已经可见了,但还是没有出现在前台,还无法和用户交互。这个时候可以理解为Activity已经显示出来了,但是我们还看不到。
(4)onResume:表示Activity已经可见了,并且出现在前台并开始活动。要注意这个和onStart的对比,onStart和onResume都表示Activity已经可见,但是onStart的时候Activity还在后天,onResume的时候已经到前台了。
(5)onPause:表示Activity正在停止,正常情况下,紧接着onStop会被调用。在特定的情况下,如歌这个时候快速的再回到这个Activity,那么onResume会被调用。此时可以做一些数据存储、停止动画等工资,但注意到不能太耗时,因为这会影响到新的Activity的显示,onPause必须先执行,新的Activity才会执行onResume.
(6)onStop:表示Activity即将停止,可以做一些稍微重量级的回收工作,同样不能太耗时。
(7)onDestory:表示Activity即将被销毁,这时Activity生命周期中的最后一个回调,在这里,我们可以做一些回收工作和最终的资源释放。

问题1:正常情况下Activity的生命周期?

  • 针对一个Activity,第一次启动,调用流程:onCreate->onStart->onResume.
  • 当用户打开新的Activity或者切换到桌面时,调用流程:onPause->onStop
  • 当用户再次回到Activity时,调用流程:onRestart->onStart->onResume.
  • 当用户按back键回退时,调用流程:onPause->onStop->onDestroy
  • 当Activity被系统回收后再次打开,生命周期回调过程和第一条一致,注意只是生命周期方法一样,不代表所有过程都一样。(再异常状态时会讲)
  • 从整个生命周期来说,onCreate和onDestroy是配对的,分别标识着Activity的创建和销毁,并且只可能有一次调用。从Activity是否可见来说,onStart和onStop是配对的,随着用户的操作或者设备屏幕的点亮,这两个方法会被调用多次;从Activity是否前台来说,onResume和onPause是配对的,随着用户操作或者设备屏幕的点亮和熄灭,这两个方法会被调用多次。

问题2: MainActivity启动BActivity,他们的生命周期?

  • 启动MainActivity
E/Lifecycle: MainActivity:onCreate
E/Lifecycle: MainActivity:onStart
E/Lifecycle: MainActivity:onResume
  • 在MainActivity启动BActivity
E/Lifecycle: MainActivity:onPause
E/Lifecycle: BActivity:onCreate
E/Lifecycle: BActivity:onStart
E/Lifecycle: BActivity:onResume
E/Lifecycle: MainActivity:onStop

从上面可以看出A启动B会先调用A的onPause,然后才会调用B的onCreate、onStart、onResume。然后调用A的onStop

  • 返回MainActivity
E/Lifecycle: BActivity:onPause
E/Lifecycle: MainActivity:onRestart
E/Lifecycle: MainActivity:onStart
E/Lifecycle: MainActivity:onResume
E/Lifecycle: BActivity:onStop
E/Lifecycle: BActivity:onDestroy

同理再回退的时候,也是先调用B的onPause,然后调用MainActivity的onRestart、onStart、onResume;然后调用BActivity的onStop、onDestroy
问题3:透明主题的Activity生命周期?
接下来我们将BActivity的主题改为透明主题

  //AndroidManifest.xml
  <activity
    android:name=".BActivity"
    android:theme="@android:style/Theme.Translucent" />
  • 启动MainActivity
E/Lifecycle: MainActivity:onCreate
E/Lifecycle: MainActivity:onStart
E/Lifecycle: MainActivity:onResume
  • 在MainActivity启动BActivity
E/Lifecycle: MainActivity:onPause
E/Lifecycle: BActivity:onCreate
E/Lifecycle: BActivity:onStart
E/Lifecycle: BActivity:onResume

我们发现启动透明Activity,与正常的不一样,不会调用MainActivity的onStop!!!

  • 返回MainActivity
E/Lifecycle: BActivity:onPause
E/Lifecycle: MainActivity:onResume
E/Lifecycle: BActivity:onStop
E/Lifecycle: BActivity:onDestroy

而且返回的时候不会调用MainActivity的onRestart和onStart!!!

问题四:异常情况下Activity的生命周期(Configuration发生改变)
当我们进行横竖屏切换时,Activity的生命周期是怎样的呢?

E/Lifecycle: MainActivity:onPause
E/Lifecycle: MainActivity:onStop
E/Lifecycle: MainActivity:onDestroy
E/Lifecycle: MainActivity:onCreate
E/Lifecycle: MainActivity:onStart
E/Lifecycle: MainActivity:onResume

当我们竖屏切横屏时:先调用onPause->onStop->onDestory->onCreate->onStart->onResume。
发送横竖屏切换时,Android系统会销毁当前Activity并重新创建Activity。
拓展:如果透明Activity横竖屏切换的生命周期是什么?

E/Lifecycle: BActivity:onPause
E/Lifecycle: BActivity:onStop
E/Lifecycle: BActivity:onDestroy
E/Lifecycle: BActivity:onCreate
E/Lifecycle: BActivity:onStart
E/Lifecycle: BActivity:onResume
E/Lifecycle: MainActivity:onStop
E/Lifecycle: MainActivity:onDestroy
E/Lifecycle: MainActivity:onCreate
E/Lifecycle: MainActivity:onStart
E/Lifecycle: MainActivity:onResume
E/Lifecycle: MainActivity:onPause

头皮发麻呀,如果我们不去敲代码验证它,你能知道它有多少坑么?
如果Activity是透明背景的Activity,它并没有多大的区别,最大的区别的就是透明Activity的下面的Activity会销毁重建并调用onPause方法
不透明的Activity切换横竖屏不会影响后面的Activity的生命周期,大家可以写代码验证,由于篇幅和时间的原因就不一一描述了。
Android为这种情况提供了现场保护方法,为了方便开发人员对一些突发情况的处理,保证数据的完整性。onSaveInstanceState和onRestoreInstanceState详细的细节不是本篇的范畴,有兴趣的同学可以自行搜索

问题4:多进程启动Activity的生命周期?
在AndroidManifest.xml文件中为BActivity设置为在其他进程开启。

    <activity
            android:name=".BActivity" 
            android:process="two"/>
  • 在MainActivity启动BActivity
//进程:com.liupei.activity_life
E/Lifecycle: MainActivity:onPause
E/Lifecycle: MainActivity:onStop
//进程:com.liupei.activity_life:two 
E/Lifecycle: BActivity:onCreate
E/Lifecycle: BActivity:onStart
E/Lifecycle: BActivity:onResume

好像没什么区别,只是打印在不同的进程。
问题5: 不同启动模式下Activity的生命周期
写到这里已经1.30了,实在挺不住了。明天再更新把~~~

整理写作不易,请小伙伴多多支持,麻烦请点赞关注支持一下,😘😘😘。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容