Android四大组件之Activity

Android四大组件之Activity

1、Activity生命周期

一般情况下Activity会经历如下生命周期:
为了方便先上一下官方的Activity生命周期图解

(1)onCreate(): 表示activity正在被创建,是activity的第一个生命周期,在这期间进行页面的初始化,setContenView()加载页面布局资源、初始化一些变量等工作。

(2)onStart(): 表示activity正在启动,这个时候已经可见,但是还未出现在前台,不能和用户进行交互。这个时候activity已经出来了但我们看不到。

(3)onResume(): 表示activity已经可见了,位于前台了,可以和用户进行交互。和onStart的相同点和区别:onStart和onResume时期Activity都已可见,但onStart不在前台,不能与用户进行交互,而onResume已在前台,可以和用户进行交互。

(4)onPause(): 表示activity正在暂停,正常情况下紧接着就执行onStop,这期间可以进行一些动画停止、数据存储工作。但不能耗时,否则会影响新activity的启动。因为启动新activity时,执行onPause()后就会执行新Activity的onCreate

(5)onStop(): 表示activity即将停止,这期间可以做一些重量级的回收工作。但不能太耗时

(6)onDestroy(): 表示activity即将被销毁,这是activity最后一个生命周期,这期间可以做一些回收工作和资源回收。

(7)onRestart(): 表示activity重新启动,即从不可见状态变为可见状态时就会被调用,一般情况下都是用户操作才会调用,例如用户操作Home键或者启动一个新页面,旧页面会执行onPause和onStop,然后再回到旧页面,这时就会调用onRestart,然后再调用onStart和onResume

2、Activity启动模式

  • 2.1、standard Activity默认的启动模式,每次启动Activity都会创建一个新的实例,放入任务栈中。这是一个典型的多实例,每一个任务栈可以有多个Activity,每个Activity可以属于多个任务栈。哪个Activity启动了当前Activity,当前Activity就放入改Activity所在的任务栈。比如
    Activity A启动了Activity B,那么Activity B就位于Activity A所在的任务栈中。此模式下onCreate()、onStart()、onResume()都会执行。
image.png
  • 2.2、singleTop 栈顶复用模式,启动的Activity位于栈顶时则会通过调用onNewItent()方法复用原来的Activity,不再创建一个新的实例。否则会像standard模式那样。一句话概述就是:当且仅当启动的 Activity 和上一个 Activity 一致的时候才会通过调用 onNewIntent() 方法重用 Activity 。使用场景:资讯阅读类 APP 的内容界面。
image.png
  • 2.3 singleTask 栈内复用模式,当启动的Activity位于栈内时,就会通过调用onNewItent()方法复用当前的Activity,如果当前Activity上面还有其他Activity,同时会将其他Activity从栈内移出。如果栈内不存在当前Activity,则和standard模式一样。即: A ->B -> C -> D -> B,此时栈内变成了 A -> B。而 A -> B -> C,栈内还是 A -> B -> C。使用场景:浏览器的主页面,或者大部分 APP 的主页面。
image.png
  • 2.4 singleInstance 单实例模式,是一个加强版的singleTask,除了拥有singleTask的特性外,此种模式下Activity单独在一个任务栈中,依然是调用 onNewIntent() 方法。
image.png

到这里Activity启动模式就要说完了,其实还有一点与其相联系的知识,那就是Inent标签
在 Android 中,我们除了在清单文件 AndroidManifest.xml 中配置 launchMode,当然可以用 Intent 标签说事儿。启动 Activity ,我们需要传递一个 Intent,完全可以通过设置 Intent.setFlags(int flags) 来设置启动的 Activity 的启动模式。

需要注意的是:通过代码来设置 Activity 的启动模式的方式,优先级比清单文件设置更高。

FLAG_ACTIVITY_NEW_TASK
这个标识会使新启动的 Activity 独立创建一个 Task。

FLAG_ACTIVITY_CLEAR_TOP
这个标识会使新启动的 Activity 检查是否存在于 Task 中,如果存在则清除其之上的 Activity,使它获得焦点,并不重新实例化一个 Activity,一般结合 FLAG_ACTIVITY_NEW_TASK 一起使用。

FLAG_ACTIVITY_SINGLE_TOP
等同于在 launcherMode 属性设置为 singleTop。

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

推荐阅读更多精彩内容