你所不知道的Activity生命周期

背景知识

典型的生命周期,就不说了,相信大家一定知道,初学者也可以百度,很多,这里大只记录一下一些生命周期中的细节

先后顺序

  1. onStart 和onResume、onPause 和 onStop的实质性区别:
    其实从实际过程中来说,两者就是差不多的,我们甚至可以只保留一组,但是尽然Android实现了重复接口,肯定有它的意义,其实两者的回调时机不一样,onStart和onStop是从Activity是否可见这个角度来回调的,而onResume和onPause是从是否位于前台来回调的。

  2. 如果从Activity A跳转到Activity B,那么B的onResume和A的onPause哪一个方法先执行呢?
    我们可以通过源码分析,也可以通过打Log日志来分析,我这边就直接记录结果了,有兴趣的朋友可以自己深入分析一下,或者通过Log来确认一下,旧Activity的onPause方法先调用,然后新Activity才会启动,从另外一个角度讲,Android的官方文档对onPause的解释有这样一句话:不能再onPause中做重量级操作,因为必须onPause执行完成之后新的Activity才能Resume,所以我们知道,不能再onPause和onStop里面做耗时性操作,尤其是onPause如果一定要的话就再onStop中执行。

异常生命周期

  1. 资源相关的系统配置发生改变导致Activity被杀死并重新创建
    默认情况下,不会做任何处理,当时系统配置发生改变导致Activity被销毁并重新创建,这个时候Activity的onPause,onStop,onDestroy方法都会被调用,同时,由于是异常中止,所以系统还会调用onSaveInstanceState来保存当前数据,onSaveInstanceState会在onStop之前调用,与onPause没有一定的先后顺序。而且只有在Activity是异常中止的情况下onSaveInstanceState才会被调用。当Activity被重建之后,系统会调用onRestoreInstanceState来获取销毁时保存的数据,并且以Bundle的形式传递给当前方法和onCreate方法,因此我们可以通过onCreate和onRestoreInstanceState来分析Activity有没有被创建,从时序上来说onRestoreInstanceState的调用在onStart之后。同时我们需要知道onSaveInstanceState和onRestoreInstanceState都只有在Activity被异常中止的时候才会被调用,正常是不会的,而且数据的存储和恢复,都是系统自动帮我们完成的
  2. 资源内存不足导致优先级低的Activity被杀死
    Activity的优先级分为三种:
  3. 前台Activity——正在和用户交互的Activity,优先级最高。
  4. 可见但非前台Activity——比如被一个弹出的对话框覆盖,用户可见,但是无法进行直接交互。
  5. 后台Activity——已经被暂停的Activity比如已经执行了onStop,优先级最低。

当系统内存不足的时候,系统就会按照上述的优先级来杀死目标Activity所在的进程,并且通过onSaveInstanceState和onRestoreInstanceState来存储和恢复数据。

总结

我们知道了,当系统配置发生改变的时候我们的Activity会被杀死和重建,当然我们也可以配置,告诉系统,我们不想重建,比如:横屏的时候我不想重建Activity,我就可以配置configChanges属性来实现

android:configChanges="orientation"

如果我们想指定多个值我们可以通过'|'来连接起来比如:

android:configChanges="orientation|keyboardHidden"

虽然configChanges的值有很多,但是我们常用的也就locale、orientation和keyboardHidden,这三个,下面是所有属性的介绍,大家可以了解一下:

项目 含义
mcc 此项表示mcc代码发生了改变(SIM卡唯一标识IMSI 中的国家代码)
mnc 此项表示mnc代码发生了改变(SIM卡唯一标识IMSI 中的运营商代码)
locale 本地位置发生改变,一般指切换了系统语言
touchscreen 触摸屏发生了改变(正常不会发生可以忽略)
keyboard 键盘类型发生了改变(用户外接键盘)
keyboardHidden 键盘的可访问性发生改变
navigation 系统当行方式发生了改变
screenLayout 屏幕布局发生了改变
fontScale 系统字体缩放比例发生改变
uiMode 用户界面模式发生了改变(夜间模式)
orientation 屏幕方向发生了改变(很常用,选转屏幕)
screenSize 屏幕的尺寸信息发生了改变
smallestScreenSize 设备的物理屏幕尺寸发生改变
layoutDirection 当布局的方向发生改变时
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念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

推荐阅读更多精彩内容

  • 启动与销毁Activity 不同于使用 main() 方法启动应用的其他编程范例,Android 系统会通过调用对...
    安卓Boy阅读 1,749评论 3 5
  • 这是我第三遍看《Android开发艺术探索》这本书了,从第一遍看的云里雾里,第二遍略微明白之后,我决定看第三遍,并...
    陈添阅读 851评论 2 8
  • 本文出自 “阿敏其人” 简书博客,转载或引用请注明出处。 一、前言 Activity,安卓四大组件之一。 每个 A...
    阿敏其人阅读 9,080评论 8 88
  • 最初画她源于涂涂绘绘 ,最终长脖子妞出现了,她像我的另一个自己 图1是改良以后的脖子短了一些 长脖子原型就是她咯 ...
    画有几画阅读 476评论 0 5
  • 有些人有些事,既然没有那个能力,就放手吧。czw,拜拜,终究不在我的能力之内
    沧桑刀刃阅读 213评论 0 0