Activity生命周期超详细总结

前言

以前刚学习Activity的时候觉得只要知道流程就可以了,反正流程不就是什么onCreate到onDestroy的么,但是学习一定要知其然还要知其所以然,流程和生命周期并不是一个概念的(所以说对学习要有高度的态度,太随意会吃亏),最近做完一个App,需要很熟悉场景的切换以及对数据的处理,十分考验对生命周期的熟悉度,以下是我总结学习的经验,欢迎小伙伴们学习借鉴,如有不对的地方也请望指出来~~

执行流程分析

一.onCreate(Bundle savedInstanceState)

创建Window相关数据,当前不可见并处于后台

场景:1.Activity创建。2.Activivty因内存不够而销毁然后重新进来。

建议操作:大部分初始化工作,设置布局以及初始化控件信息等。

参数:savedInstanceState,因内存不足/手机旋转而关闭Activity时可以把数据保存在这里

#onContentChanged()#主生命周期

场景:在Activity调用setContentView()或addContentView()方法的回调

建议操作:findViewById()

#onRestart()#非主生命周期

从Activity或者桌面切换回来

#onPostCreate()#主生命周期

执行完onCreate会调用,很少用到

二.onStart()

已创建Window相关数据,当前可见,但处于后台

场景:1.Activity正常生命周期。2.Activity切换回来。3.按Home键再切换回。4.Activivty因内存不够而销毁然后重新进来。

建议操作:数据初始化和动画的初始化

#onRestoreInstanceState(Bundle savedInstanceState)#非主生命周期

当Activity被销毁后出发,用于恢复用户数据,需要和onSaveInstanceState配合使用

场景:1.Activity被杀死再回来。2.改变屏幕方向。

三.onResume()

处于前台,用户已经看见但不能交互,也无法获取控件实际宽高等数据

场景:1.Activity正常生命周期。2.Activity切换回来。3.按Home键再切换回来。4.Activivty因内存不够而销毁然后重新进来

建议操作:开启动画,打开独有设备(比如摄像头)

#onPostResume()#主生命周期

执行完onResume()会调用,很少用到

四.onWindowFocusChanged(boolean isFocus)

表示用户已经看见Activity并且获取到了焦点,也可以交互,可以获取控件的实际宽高

场景:1.对话框(键盘,popwindow,dialog)弹出和消失。2.Activity跳转与返回(执行2次)3.按Home键切换

建议操作:对获取失去焦点特别针对/要求的操作(比如设置对话框的实际宽高并显示)

五.onPause()

表示这个Activity将会被停止一段时间并且使用者很可能会再次回到你的Activity来。但是这也很可能表示着用户正在离开你的app。

场景:1.窗口半透明或者被半遮盖。2.跳转到另一个Activity。3.按Home键去桌面

建议操作:结束占用CPU的动画或其他运行任务,释放系统资源

#onSaveInstanceState(Bundle savedInstanceState)#主生命周期

Activity 容易被销毁的时候调用, 注意是容易被销毁, 也可能没有销毁就调用了

场景:1.按下home键。2.锁屏。3.跳转到其他Activity。4.横竖屏切换

建议操作:保存你想保存的数据

注意:finish()不会执行此方法,必须要Android销毁才会执行

六.onStop()

表示这个Activity已经完全的被遮盖或用户看不见,在此前必会调用onPause()

场景:1.跳转到另一个Activity。2.按home去桌面

建议操作:保存一些持久化数据

七.onDestroy()

表示这个Activity已经被销毁了

常见场景

1.跳转到另一个Activity再回来

A->B:onWindowFocusChanged()->onPause()->onSaveInstanceState()->onStop()

B:onCreate()->onStart()->onResume()->onWindowFocusChanged()

B->A:onRestart()->onStart()->onResume()->onWindowFocusChanged()

2.Activity后台被杀死再回来

A:onCreate()->onStart()->onRestoreInstanceState()->onResume()->onWindowFocusChanged()

3.对话框弹出与消失

A:onWindowFocusChanged()

4.锁屏/按Home键去桌面

A:onPause()->onSaveInstanceState()->onStop()->onWindowFocusChanged()

5.解锁/从桌面回来

A:onRestart()->onStart()->onResume()->onWindowFocusChanged()

区别

1.onCreate()和onStart()的区别?
onCreate()只执行一次,并且不可见,onStart()会执行多次(上面提到的场景),并且可见(并不是能看见),最后是两者做的事情也不一样。

2.onResume()onWindowFocusChanged()的区别?
前者主要附着于Activity的生命周期,并且不能获取控件数据并设置(比如对话框的宽度是屏幕的4/5),后者主要针对当前视窗的焦点状态,并且可以获取到所有控件的完整数据并设置

3.onPause()和onResume()的关系
前者是用户暂时离开,在这里可以做一些数据的保存,后者是用户切换回来,这里可以做一些数据的恢复,当然这两种操作有相关的方法实现,重要的是明白它的意思就行。

4.与生命周期密切相关的onSaveInstanceState方法和onRestoreInstanceState方法在什么时候执行?
当targetSdkVersion小于3时onSaveInstanceState是在onPause方法中调用的,而大于3时是在onStop方法中调用的。
而onRestoreInstanceState是在onStart之后、onResume之前调用的。

参考资料

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

推荐阅读更多精彩内容

  • Activity作为四大组件之一,是使用频率最高的组件,也是直接为用户提供主体的操作主件,基本上我们在Androi...
    倚栏静望阅读 573评论 0 0
  • 【Android Activity】 什么是 Activity? 四大组件之一,通常一个用户交互界面对应一个 ac...
    Rtia阅读 3,794评论 3 18
  • 概述: 先祭出神图: 从上面的图中可以看到一些东西 onResume:Activity快要显示了,但是官方说用这种...
    ironman_阅读 507评论 0 0
  • 我是火焰,被我燃烧过的,只有一次。 我是火焰,我愤怒的燃烧。 我是火焰,我火光冲天,我燃开大地,只是我的背后,一片...
    凝目思阅读 251评论 0 0
  • 鸡翅 与饭 最为相配
    青钰不是玉是鱼阅读 143评论 0 0