Android学习笔记1-Activity的Lifecycle和Launch Mode

(本文同步在个人Google博客中)

Lifecycle与Launch Mode的学习笔记而已。

1. Activity Lifecycle

http://developer.android.com/reference/android/app/Activity.html

---基本来自官方介绍,结合O'REILLY家的《Hello, Android》这本书

Android的activity有各种各样的状态,直接由下图表示:(Activity的启动,终止,中止,恢复等都符合下图流程,通过自动调用图中的onXX()函数进行状态的改变)

Activity Lifecycle

明白lifecycle有4个state,3个loop即可,两者结合起来理解。

4个state:

1)running--在程序最前端,动态阶段

2)paused(visible)--暂停阶段,但是可见的(比如弹出dialog或半透明widget,背后的activity还是可见的)

3)stoped(invisible)--停止阶段,已经不可见,仅在后台保存着状态与信息。当系统内存不足时这是最容易被杀死的状态。

4)killed--进程已被杀死阶段,从内存中释放出来。当需要再次展示给用户时,就必须重新onCreate()或onRestart() 。

3个loop:

1) entire lifetime--from onCreate() to onDestory()

完整的生命周期。进程在这个周期里始终是“存在”的状态。

2) visible lifetime--from onStart() to onStop()

可见的生命周期。进程在这个周期里始终是“可见”的状态,可见状态与信息都占据着内存。

3)foreground lifetime --from onResume() to onPause()

最前端的生命周期。进程在这个周期里就在任务棧的最顶端,始终running的状态。

在进程切换状态前后想要改写Activity的信息之类的,就Override对应的onXX()函数即可。

但此外还有两个常用的函数:

* onSaveInstanceState(Bundle)

* onRestoreInstanceState(Bundle)

前者在一时停止onPause()之前调用:

onSaveInstanceState(Bundle)--->onPause()

调用之后再恢复进程,就会调用后者,与其他函数的顺序为:

onCreate(Bundle)--->onStart()--->onRestoreInstanceState(Bundle)--->onResume()

动态instance通过Bundle保存进来,在onCreate(Bundle)或onRestoreInstanceState(Bundle)中提取Bundle恢复。

但是Google官网也说了,这两个函数不属于生命周期内部函数。所以有可能不会被调用。还是不推荐使用这两个函数。

虽然个人觉得在activity横竖屏切换时调用onSaveInstanceState(Bundle)保存输入字符,其他动态instance还挺好用的。= =|||

2. Launch Mode


http://developer.android.com/guide/topics/manifest/activity-element.html

http://developer.android.com/guide/components/tasks-and-back-stack.html

 ---还是参照Developers官方介绍

Launch Mode是AndroidManifest.xml中Activity设置参数:

android:launchMode=["standard"|"singleTop"|"singleTask"|"singleInstance"]

1)standard: 默认设置。

如下图任务棧所示,一调用startActivity()就会产生新的实例。于是也有可能一个activity被调用多次而没有正常退出,产生好几个实例。

Activity Task Stack

2)singleTop:

顾名思义,任务棧只有单一的顶端。每次调用startActivity()时会检查栈顶,若是相同activity则启动onNewIntent()的方法,而不重新创建新的实例。

比如QQ的消息推送,好几条消息推送过来默认模式点击每条消息都会创建一个新的聊天界面的activity,设置singleTop之类可以保证聊天界面仅维持一个实例。

-------以上两个模式被官方归类为Normal,下面两个属于Special-------

3)SingleTask:

相对于singleTop,调用startActivity()时不只会检查栈顶,而是遍历整个棧。也是启动启动onNewIntent()保证整个棧中都只有activity对应的一个实例。所以叫single task。

SingleTask Stack

比如上图任务棧,标志为“SingleTask”的Activity2被再次启动时,栈顶会退到Activity2,Activity3是被终止还是推到后台运行,要根据后面说的intent flag设置确定吧(这个我也不太清楚)。

4)SingleInstance:

类似SingleTask,只是会新开一个新棧来存放该activity的实例,且只有一个实例。(所以这个模式到底有什么意义,哦减少遍历时间?求大牛讲解)


*设置Launch Mode启动模式有两种方法:

1)像上面说的在AndroidManifest.xml中设置"standard"|"singleTop"|"singleTask"|"singleInstance"设置四种参数;

2)使用intent flag。就是在Intent中定义flag,然后调用startActivity()。

flag居然不是对应的四种模式,而只有三种!分别是:

FLAG_ACTIVITY_NEW_TASK:如果activity的实例存在,就调用onNewIntent()从后台调到前台,如前面所说的singleTask。

FLAG_ACTIVITY_SINGLE_TOP:不用说了,如前面的singleTop。

FLAG_ACTIVITY_CLEAR_TOP:如果activity的实例存在,就调用onNewIntent()从后台调到前台,但是在这前面的activity的实例都会被销毁(onDestroy())

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

推荐阅读更多精彩内容