Android Activity生命周期详解(针对实习面试)

先发一张经典的不能再经典的activity生命周期图

activity生命周期图

首先声明一点,我认为对于刚接触Android不久的人,了解一下就可以,没必要弄懂深层次的东西,本篇文章主要面向实习生面试。一般实习生面试,面试官都会涉及到Android四大组件,而activity的生命周期又非常基础和重要,下面我先根据上面的图简单解析一下:

在正常情况下,一个activity被启动会经历如图所示生命周期 

(1)onCreate:  表示activity正在被创建

(2)onRestart: 当activity从不可见状态变为可见状态时,会调用此方法

(3)onStart: 此方法被调用时表示activity已经显示出来了,但是activity没有在前台,无法和用户交互

(4)onResume: 表示activity已经可见,到了前台并可以和用户交互

(5)onPause: 当Activity被一些窗口遮挡住的时候就会调用此方法,例如弹出dialog

(6)onStop: 当activity不可见的时候会调用此方法,例如跳转activity,按home键

(7)onDestroy: 当activity被销毁的时候会调用此方法,例如在activity中执行finish()方法

在这里强调几个问题:

(1) 当activity被销毁时,再哪个生命周期函数中做数据保存工作最可靠?

答案是在onPause函数中。

根据上面的声明周期图中我们可以看出,如果activity处于onPause时,如果系统内存不足,当前的activity进程就有可能被杀死,所以在onPause中做数据保存工作最可靠。

(2)在屏幕状态发生改变时,例如竖屏变为横屏,这时activity会执行哪些生命周期方法?

这就涉及到了在异常状况下activity的生命周期:看下面我的测试程序图


当我点击了横竖屏切换的时候会调用这些方法

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

这里我们注意到多了一个onSaveInstanceState方法和onRestoreInstanceState方法,onSaveInstanceState方法是当activity是在异常情况下终止时,会被调用,用于保存数据。然后当activity被重新创建的时候会调用onRestoreInstanceState,用于恢复数据。这里要提到一点,就是在onCreate中也可以恢复数据,二者的区别是:onRestoreInstanceState一旦被调用,其参数Bundle saceInstanceState一定是有值的,但是onCreate不行,如果onCreate正常启动的话,其参数Bundle saceInstanceState是为null的,必须要进行判断是否为空。

我再补充两个容易被忽略的生命周期调用情况

1 关闭屏幕 onPause->onSaveInstanceState->onStop

   再打开屏幕 onRestart->onStart->onResume

2 在主界面按home键 onPause->onSaveInstanceState->onStop

   再次回到主界面 onRestart->onStart->onResume


一般作为实习生参加面试,面试官是不会涉及到activity的启动模式相关问题,不过也会有个别面试官喜欢深入一点,如果这时你回答上来了,那肯定就是加分项,下面我就简单介绍一下Android里面activity的启动模式:

activity的启动模式有四种

(1) standard    标准模式

    默认的启动模式,不管有没有已经存在的实例,都会生成新的实例。

(2)  singleTop   栈顶复用模式

    假设一个activity的启动模式设置为singleTop,当一个activity要跳转到这个activity时,如果该activity存在任务栈中且处于栈顶,那么将不会生成一个新的该activity,而会重复利用这个activity,并且会回调该activity中的OnNewIntent方法。

(3)  singleTask    栈内复用模式

    这是一种单例模式,只要activity在一个栈中存在,那么多次启动该activity都不会重新创建实例,并且默认具有clearTop的功能,就是假如一个人物张总有ABCD四个activity,A的启动模式为 singleTask,A处于栈底,D处于栈顶,如果这时启动A,那么BCD都将会被清除出栈,也就是在A之上的都会被清除,这就是clearTop。

(4)  singleInstance    单实例模式

    它具有singleTask的所有特性,并且这种模式下,该activity只能单独处于一个任务栈中,所以启动它时系统会为这个activity新建一个任务栈。

关于activity的启动模式,想深入了解的人可以在其他地方多了解了解,这里我只是做个简单介绍,应该足以应付实习生面试。

最后在分享一下安卓实习面试经验,四大组件非常重要,四大组件非常重要,四大组件非常重要。

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

推荐阅读更多精彩内容