基础篇一:Activity与Activity使用分析

1 前言

Activity是四大组件中最常用组件,了解Activity,是开发高质量的应用的必须条件。下面有四个问题来学习Activity

  Activity的形态 ? 

  Activity的生命周期?

  Activity状态保存于恢复?

  Activity的四种启动模式对比?

2 Activity的起源

Activity是与用户交互的第一接口,它提供的是一个用户完成指令的窗口。当我们创建Activity之后,通过调用setContentView(View)方法来给>该Activity指定一个显示的界面,并且以此为基础提供给用户交互的接口。系统采用Activity栈的方式来管理Activiity。

3 Activity的四大形态

Active/Running

这时候,Activity处于Activity栈的最顶层,是可见,并且与用户进行交互。

Paused

当Activity失去焦点,被一个新的非全屏的Activity或者是一个透明的Activity放置在栈顶时,Activity就转化成Paused形态。但它只是失去了与用 >户交互的能力,所有的组昂太爱信息,成员变量都还保持着,只有在系统内存极低的情况下,才会被系统回收掉。

Stoped

如果一个Activity被另一个Activity完全覆盖,那么Activity就会进入Stopped形态,此时它不在可见,但是依然保持了所有的状态信息和成员变
量。

Killed

当Activity被锡系统回收掉或者是Activity从来没有创建过,Activity就处于Killed形态。

3 Activity的生命周期

Activity生命周期
Activity生命周期

在此图中的多个Activity生命周期中,只有三个状态是稳定的,而其他状态都是过度状态:

Resumed(可见,可与用户交互)

这个状态就是前面说的Active/Running形态,此时Activity处于Activity栈顶,处理用户的交互。

Paused (部分可见,不可与用户交互)

当Activity的一部分被遮挡的时候进入这个状态,这个状态下的Activity不会接受用户输入。

Stopped

当Activity完全被覆盖时进入这个状态,此时Activity不可见,仅在后台运行

启动正常流程
onCreate() 创建基本的UI元素
onStart() 调用Activity的资源
onResume() 调用系统资源,显示

销毁正常流程
onPaused() 释放系统资源
onStop() 清除Activity的资源,避免浪费
onDestory() 销毁Activity

4 Activity状态保存于恢复

官方版重新创建 Activity

当Activity的onSaveInstanceState调用的时候,Activity会自动收集View层级中每个View的状态。请注意只有在内部实现了View的保存/恢复状态方法的View才会被收集到。一旦onRestoreInstanceState方法被调用,Activity会把收集的数据发送回给View结构树中具有相同android:id配置的View。

虽然View的状态被自动保存了,但是Activity的成员变量并没有。他们会随着Activity一并销毁。你需要通过onSaveInstanceState和onRestoreInstanceState手动保存并恢复这些变量。

public class MainActivity extends AppCompatActivity {
// These variable are destroyed along with Activity
private int someVarA;
private String someVarB;
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("someVarA", someVarA);
outState.putString("someVarB", someVarB);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
someVarA = savedInstanceState.getInt("someVarA");
someVarB = savedInstanceState.getString("someVarB");}’
‘}`

5 Activity的启动模式对比

AndroidManifest启动模式:

standard

默认的启动模式,标准模式,每次都会创建新的实例。 两次创建同一个Activity,获得两个不同的实例。

singleTop

系统会判断当前任务栈的顶部Activity是不是要启动的Activity。如果是则引用当前Activity,如果不是则创建新的Activity。适用于接收到消息后显示的界面,例如QQ接收到消息,如果来10条消息,不能一次弹出10个Activity。

singleTask

情况一,在同一个App的Activity栈中启动时,如果存在,这把在栈中此Activity以上的Activity都销毁,把其置于栈顶;如果不存在,则置其于栈顶。
PS:主Activity使用此模式,重载onNewIntent() 中finish(),可用于退出应用程序。

情况二,不同的app或两个栈
会把被调用的栈的所有Activity置于当前栈的栈顶,如何调用Activity以上有其他Activity,则销毁。

singleInstance

类似于浏览器的启动模式,应用A与应用B分别启动singleInstance的Activity则两者得到的是同一个,共享实例,而且任务栈中只能存在一个该Activity。

Intent Flag启动模式:

Intent.FLAG_ACTIVITY_NEW_TASK
standard

Intent.FLAG_ACTIVITY_SINGLE_TOP
singleTop

Intent.FLAG_ACTIVITY_CLEAR_TOP
singleTask

Intent.FLAG_ACTIVITY_NO_HISTORY
Activity A B C A启动B为Intent.FLAG_ACTIVITY_NO_HISTORY,B启动C,则任务栈中为AC,没有B。

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

推荐阅读更多精彩内容