Android四大组件之Activity

一、activity简介

activity作为android四大组件中最基础最常用的组件,它主要负责与用户交互,一般一个activity就是一个页面(用户看到的屏幕上的页面)。

二、activity状态

activity 有四种状态:Active/Running  Paused   Stopped  Killed
Active/Running(活跃/运行):activity被启动之后,处于栈顶,也就是被激活,可以与用户进行正常的交互。
Paused(已暂停):当activity失去焦点,比如说此时正在进行网络请求等耗时操作,网络请求的进度条正在展示,再比如说点击了页面上的一个按钮,此时页面上弹出一个PopupWindow或者Dialog.此时activity就是处于Paused.但此时activity与窗口管理器(WindowsManage)保持联络,但是当手机系统内存极低的时候,activity就会被强行的终止掉。
Stopped(已停止):当当前activity被完全覆盖,不可见,就是停止状态。但当前activity依然存活,当系统内存不够用,需要的时候,当前activity会被强行终止。
Killed(已销毁):当activity处于Paused或者是Stopped这两个状态的时候,activity就可以被销毁。

关于activity的状态其实是根据用户的操作相互转换的,如下图2-01:

2-01

三、activity的生命周期

首先还是先来一张经典的生命周期图2-02:

2-02

ps:
灰色矩形方框内都是activity的生命周期方法
有颜色的圆框里是activity的状态
圆角框斜体文字是说明

生命周期方法情形调用说明:

情形1.当前activity被启动:执行onCreate(),onStart(),onResume(),之后activity展现在用户页面上,处于运行状态(Running)
情形2.当前activity显示dialog或者被透明的activity覆盖(依然部分可见)或锁屏:执行onPause(),处于暂停状态(Paused)
情形3.当前activity中关闭dialog回到当前activity或解锁屏:执行onReseme(),回到运行状态(Running)
情形4.当前activity被另一个activity完全覆盖或者是点击Home键:执行onPause(),onStop(),处于停止状态(Stopped)
情形5.从其他的activity回退(是回退)到当前activity:执行onRestart(),onstart(),onResume(),回到运行状态(Running)
情形6.如果发生了情形2,或者是情形4,activity处于暂停或者是停止状态,如果遇到系统内存严重不足,系统就是强制回收activity,那么再回到activity的话就会执行:onCreate(),onStart(),onReseme(),处于运行状态(Running)
情形7.用户退出activity,就是用户点击返回键或者是代码中调用finish()方法,执行:onPause(),onStop(),onDestroy(),activity销毁。

日常开发中常用的生命周期方法:
onCreate():做一些初始化UI的操作。
onResume():比如说进入页面就需要网络请求数据填充UI并且从上一个页面(activity)要返回到当前页面也需要刷新页面(再次进行网络请求时)那么就直接把网络请求写在onResume()方法中。
onDestroy(): 一些资源的回收,需要在此方法中进行,以免造成不必要的内存泄露。
生命周期方法是开发中最常用的最基础的东西,一定要自己动手打印,眼过千遍不如手过一遍。

四、activity的启动模式

activity的启动模式与自身的生命周期方法息息相关,activity的启动模式不同,生命周期方法也不同。

任务栈的概念
我们知道当我们启动一个应用的时候,系统会默认给当前应用开启一个应用栈,或者叫任务栈,里面存放根activity,
那么正常情况下,根activity会在任务栈的最底端,然后再启动一个新的activity,新的activity会处在栈的最顶端,如图2-03所示:

2-03

了解了任务栈的概念,接下来进入正题,activity的启动模式
activity的启动模式有四种:
standard:标准模式,也是activity默认的启动模式,新启动的activity 处于栈顶启动如图2-04:


2-04

SingleTop:栈顶复用模式,在该模式下,如果我们要启动的activity处于任务栈的栈顶,那么activity就不会被重复创建,下图中Aactivity的启动模式为SingleTop 如图2-05:

2-05

SingleTask:栈内复用模式,该模式与SingleTop相似,SingleTop只是针对栈顶的元素,SingleTask针对栈内所有元素,下图中我们给A activity启动模式设置为SingleTask,效果如图2-06:

2-06

SingleInstance:全局唯一模式,这种启动模式比较特殊,在该模式下,我们会为新的activity单独创建一个任务栈,来存放此activity,并使其获取焦点,新的任务栈 有且只有这一个activity的实例。如果已经创建过目标activity的实例,则比较创建新的task,而是将之前创建的activity唤醒(task的状态切换为Foreground).如下图,A activity 启动模式设置为SingleInstance,效果如图2-07:

2-07

启动模式的使用场景:
standard:标准模式是平时使用最多的,默认就是这个模式,就不多说了;
SingleTop:栈顶复用模式,个人碰到的场景就是,比如说点击按钮跳转到另一个activity,这个按钮又没有做防重复点击的处理,那么 这个时候快速的点击按钮,就会跳转很多个activity(创建多个activity的实例),这个时候就可以把目标activity设置为SingleTop.问题解决。
SingleTask:适用于返回主页面的activity,其中的道理就不多解释了。

未完待续。。。

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

推荐阅读更多精彩内容