Android學(xué)習(xí)筆記1-Activity的Lifecycle和Launch Mode

(本文同步在個(gè)人Google博客中)

Lifecycle與Launch Mode的學(xué)習(xí)筆記而已。

1. Activity Lifecycle

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

---基本來(lái)自官方介紹,結(jié)合O'REILLY家的《Hello, Android》這本書(shū)

Android的activity有各種各樣的狀態(tài)概而,直接由下圖表示:(Activity的啟動(dòng)抽高,終止欢策,中止哼丈,恢復(fù)等都符合下圖流程臣樱,通過(guò)自動(dòng)調(diào)用圖中的onXX()函數(shù)進(jìn)行狀態(tài)的改變)

Activity Lifecycle

明白lifecycle有4個(gè)state撼短,3個(gè)loop即可再膳,兩者結(jié)合起來(lái)理解。

4個(gè)state:

1)running--在程序最前端曲横,動(dòng)態(tài)階段

2)paused(visible)--暫停階段喂柒,但是可見(jiàn)的(比如彈出dialog或半透明widget,背后的activity還是可見(jiàn)的)

3)stoped(invisible)--停止階段禾嫉,已經(jīng)不可見(jiàn)灾杰,僅在后臺(tái)保存著狀態(tài)與信息。當(dāng)系統(tǒng)內(nèi)存不足時(shí)這是最容易被殺死的狀態(tài)熙参。

4)killed--進(jìn)程已被殺死階段艳吠,從內(nèi)存中釋放出來(lái)。當(dāng)需要再次展示給用戶時(shí)孽椰,就必須重新onCreate()或onRestart() 昭娩。

3個(gè)loop:

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

完整的生命周期。進(jìn)程在這個(gè)周期里始終是“存在”的狀態(tài)黍匾。

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

可見(jiàn)的生命周期栏渺。進(jìn)程在這個(gè)周期里始終是“可見(jiàn)”的狀態(tài),可見(jiàn)狀態(tài)與信息都占據(jù)著內(nèi)存锐涯。

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

最前端的生命周期磕诊。進(jìn)程在這個(gè)周期里就在任務(wù)棧的最頂端,始終running的狀態(tài)全庸。

在進(jìn)程切換狀態(tài)前后想要改寫Activity的信息之類的秀仲,就Override對(duì)應(yīng)的onXX()函數(shù)即可。

但此外還有兩個(gè)常用的函數(shù):

* onSaveInstanceState(Bundle)

* onRestoreInstanceState(Bundle)

前者在一時(shí)停止onPause()之前調(diào)用:

onSaveInstanceState(Bundle)--->onPause()

調(diào)用之后再恢復(fù)進(jìn)程壶笼,就會(huì)調(diào)用后者神僵,與其他函數(shù)的順序?yàn)椋?/p>

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

動(dòng)態(tài)instance通過(guò)Bundle保存進(jìn)來(lái),在onCreate(Bundle)或onRestoreInstanceState(Bundle)中提取Bundle恢復(fù)覆劈。

但是Google官網(wǎng)也說(shuō)了保礼,這兩個(gè)函數(shù)不屬于生命周期內(nèi)部函數(shù)沛励。所以有可能不會(huì)被調(diào)用。還是不推薦使用這兩個(gè)函數(shù)炮障。

雖然個(gè)人覺(jué)得在activity橫豎屏切換時(shí)調(diào)用onSaveInstanceState(Bundle)保存輸入字符目派,其他動(dòng)態(tài)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設(shè)置參數(shù):

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

1)standard: 默認(rèn)設(shè)置胁赢。

如下圖任務(wù)棧所示企蹭,一調(diào)用startActivity()就會(huì)產(chǎn)生新的實(shí)例。于是也有可能一個(gè)activity被調(diào)用多次而沒(méi)有正常退出智末,產(chǎn)生好幾個(gè)實(shí)例谅摄。

Activity Task Stack

2)singleTop:

顧名思義,任務(wù)棧只有單一的頂端系馆。每次調(diào)用startActivity()時(shí)會(huì)檢查棧頂送漠,若是相同activity則啟動(dòng)onNewIntent()的方法,而不重新創(chuàng)建新的實(shí)例由蘑。

比如QQ的消息推送闽寡,好幾條消息推送過(guò)來(lái)默認(rèn)模式點(diǎn)擊每條消息都會(huì)創(chuàng)建一個(gè)新的聊天界面的activity,設(shè)置singleTop之類可以保證聊天界面僅維持一個(gè)實(shí)例尼酿。

-------以上兩個(gè)模式被官方歸類為Normal爷狈,下面兩個(gè)屬于Special-------

3)SingleTask:

相對(duì)于singleTop,調(diào)用startActivity()時(shí)不只會(huì)檢查棧頂裳擎,而是遍歷整個(gè)棧淆院。也是啟動(dòng)啟動(dòng)onNewIntent()保證整個(gè)棧中都只有activity對(duì)應(yīng)的一個(gè)實(shí)例。所以叫single task句惯。

SingleTask Stack

比如上圖任務(wù)棧,標(biāo)志為“SingleTask”的Activity2被再次啟動(dòng)時(shí)支救,棧頂會(huì)退到Activity2抢野,Activity3是被終止還是推到后臺(tái)運(yùn)行,要根據(jù)后面說(shuō)的intent flag設(shè)置確定吧(這個(gè)我也不太清楚)各墨。

4)SingleInstance:

類似SingleTask指孤,只是會(huì)新開(kāi)一個(gè)新棧來(lái)存放該activity的實(shí)例,且只有一個(gè)實(shí)例贬堵。(所以這個(gè)模式到底有什么意義恃轩,哦減少遍歷時(shí)間?求大牛講解)


*設(shè)置Launch Mode啟動(dòng)模式有兩種方法:

1)像上面說(shuō)的在AndroidManifest.xml中設(shè)置"standard"|"singleTop"|"singleTask"|"singleInstance"設(shè)置四種參數(shù)黎做;

2)使用intent flag叉跛。就是在Intent中定義flag,然后調(diào)用startActivity()蒸殿。

flag居然不是對(duì)應(yīng)的四種模式筷厘,而只有三種鸣峭!分別是:

FLAG_ACTIVITY_NEW_TASK:如果activity的實(shí)例存在,就調(diào)用onNewIntent()從后臺(tái)調(diào)到前臺(tái)酥艳,如前面所說(shuō)的singleTask摊溶。

FLAG_ACTIVITY_SINGLE_TOP:不用說(shuō)了,如前面的singleTop充石。

FLAG_ACTIVITY_CLEAR_TOP:如果activity的實(shí)例存在莫换,就調(diào)用onNewIntent()從后臺(tái)調(diào)到前臺(tái),但是在這前面的activity的實(shí)例都會(huì)被銷毀(onDestroy())

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末骤铃,一起剝皮案震驚了整個(gè)濱河市拉岁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌劲厌,老刑警劉巖膛薛,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異补鼻,居然都是意外死亡哄啄,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門风范,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)咨跌,“玉大人,你說(shuō)我怎么就攤上這事硼婿⌒堪耄” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵寇漫,是天一觀的道長(zhǎng)刊殉。 經(jīng)常有香客問(wèn)我,道長(zhǎng)州胳,這世上最難降的妖魔是什么记焊? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮栓撞,結(jié)果婚禮上遍膜,老公的妹妹穿的比我還像新娘。我一直安慰自己瓤湘,他們只是感情好瓢颅,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著弛说,像睡著了一般挽懦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上木人,一...
    開(kāi)封第一講書(shū)人閱讀 51,578評(píng)論 1 305
  • 那天巾兆,我揣著相機(jī)與錄音猎物,去河邊找鬼。 笑死角塑,一個(gè)胖子當(dāng)著我的面吹牛蔫磨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播圃伶,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼堤如,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了窒朋?” 一聲冷哼從身側(cè)響起搀罢,我...
    開(kāi)封第一講書(shū)人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎侥猩,沒(méi)想到半個(gè)月后榔至,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了平酿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坝茎。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡琉用,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤淡诗,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站伊履,受9級(jí)特大地震影響韩容,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜唐瀑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一宙攻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧介褥,春花似錦、人聲如沸递惋。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)萍虽。三九已至睛廊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間杉编,已是汗流浹背超全。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工咆霜, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嘶朱。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓蛾坯,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親疏遏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子脉课,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容