你真的了解Activity的生命周期吗

如需转载请评论或简信,并注明出处,未经允许不得转载

目录

前言

Activity作为四大组件之首,是使用最为频繁的组件,是与用户交互的接口。本文将Activity的生命周期分为两部分内容,分别是正常情况下的生命周期异常情况下的生命周期

Activity的四种形态

Android系统是通过Activity栈的形式来管理Activity

Activity栈.png

Active:Activtiy处于栈顶

Paused:可见但不可交互

Stopped:不可见

killed:系统回收掉

正常情况下的生命周期

所谓正常情况下的生命周期,是指由用户参与的情况下,Activty所经过的生命周期的改变

正常情况下Activity的生命周期
生命周期方法 说明
onCreate() 表示Activity正在被创建,这是生命周期的第一个方法。在这个方法中,我们可以做一些初始化工作,比如调用setContentView去加载页面布局资源、初始化Activity所需数据
onStart() 表示Activity正在被启动,即将开始,这时候Activity已经可见了,但是还没有出现在前台,即还不能与用户交互
onResume() 表示Activity已经可见了,并且出现在前台并开始活动,这时候Activity可以和用户进行交互
onPause() 表示Activity正在停止,正常情况下,紧接着onStop就会被调用。此时可以做一些数据存储,停止动画等工作,但是注意不能太耗时,因为这会影响到新的Activity的显示,onPause必须执行完,新ActivityonResume才会执行
onStop() 表示Activity即将停止,可以做一些稍微重量级的回收工作,同样不能太耗时
onRestart() 表示Activity正在重新启动,紧接着会调用onResume
onDestory() 表示Activity即将被销毁,这是Activity生命周期中的最后一个回调,在这里,我们可以做一些回收工作和最终的资源释放

注:打开Dialog、Toast不会影响到Activity的生命周期

异常情况下的生命周期

异常情况下的生命周期是指由于资源内部不足Activity被系统回收 或 由于当前设备的Configuration(如屏幕方向等)发生改变从而导致Activity被销毁重建

异常情况下Activity的生命周期

在异常情况下,onSaveInstanceSate()会保存当前Activity的状态信息,所以我们在这个方法中存储一些数据。当Activity被重新创建之后,系统会调用onRestoreInstanceState(),并且把Activity销毁时onSaveInstanceSate()所保存的Bundle对象作为参数同时传递给onCreate()onRestoreInstanceState()。因此,我们可以通过onCreate()onRestoreInstanceState()来判断Activity是否被重建了,如果被重建了,我们就可以取出之前保存的数据并恢复。由于onCreate()方法中的bundle参数可能会空,而onRestoreInstanceState()只有异常情况下才调用所以一定不为空,所以这里推荐在onRestoreInstanceState()中来进行数据恢复

这里要注意的是,onSaveInstanceSate()onRestoreInstanceState()只会出现在Activity被异常终止的情况下,正常情况下系统不会回调这两个方法

扩展

前面介绍了,当屏幕方向发生变化时,Activtiy就会销毁重建,那么有没有办法不重新创建呢?答案当然是有的!

<activity android:name=".DemoActivity"
    android:configChanges="orientation">
</activity>

我们只需要进行配置android:configChanges="orientation"即可,这样当我们旋转屏幕方向时,Activity的生命周期就不会发生变化,而是调用onConfigrationChanged()

这个属性的使用可以包含多个属性,中间用 | 隔开,如android:configChanges="orientation|keyboardHidden"

VALUE DESCRIPTION
mcc 国际移动用户识别码所属国家代号是改变了,sim被侦测到了,去更新mcc MCC是移动用户所属国家代号
mnc 国际移动用户识别码的移动网号码是改变了, sim被侦测到了,去更新mnc MNC是移动网号码,最多由两位数字组成,用于识别移动用户所归属的移动通信网
locale 用户所在区域发生变化,一般是用户切换了语言时,切换后的语言会显示出来
touchscreen 触摸屏是改变了------通常是不会发生的
keyboard 键盘发生了改变----例如用户用了外部的键盘
keyboardHidden 键盘的可用性发生了改变
navigation 导航发生了变化-----通常也不会发生
screenLayout 屏幕的显示发生了变化------不同的显示被激活
fontScale 字体比例发生了变化----选择了不同的全局字体
uiMode 用户的模式发生了变化
orientation 屏幕方向改变了---横竖屏切换
screenSize 屏幕大小改变了
smallestScreenSize 屏幕的物理大小改变了,如:连接到一个外部的屏幕上

总结

平时很多人往往只关心正常情况下的Activity生命周期,但是了解异常情况下的生命周期,有时候可能能帮助我们解决一些比较棘手的问题

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

推荐阅读更多精彩内容