我對Activity的簡單理解和使用

? ?作為一個從事Android工作的小菜鳥,來談一談我對四大組件之一的Activity的簡單理解和使用械馆。先上一張生命周期圖卤唉,這樣看起來屌屌的


相信不少朋友也已經(jīng)看過這個流程圖了,也基本了解了Activity生命周期的幾個過程射窒,我們就來說一說這幾個過程藏杖。

1.啟動Activity:系統(tǒng)會先調(diào)用onCreate方法,然后調(diào)用onStart方法脉顿,最后調(diào)用onResume蝌麸,Activity進入運行狀態(tài)。

2.當前Activity被其他Activity覆蓋其上或被鎖屏:系統(tǒng)會調(diào)用onPause方法艾疟,暫停當前Activity的執(zhí)行来吩。

3.當前Activity由被覆蓋狀態(tài)回到前臺或解鎖屏:系統(tǒng)會調(diào)用onResume方法,再次進入運行狀態(tài)蔽莱。

4.當前Activity轉(zhuǎn)到新的Activity界面或按Home鍵回到主屏弟疆,自身退居后臺:系統(tǒng)會先調(diào)用onPause方法,然后調(diào)用onStop方法碾褂,進入停滯狀態(tài)兽间。

5.用戶后退回到此Activity:系統(tǒng)會先調(diào)用onRestart方法,然后調(diào)用onStart方法正塌,最后調(diào)用onResume方法嘀略,再次進入運行狀態(tài)。

6.當前Activity處于被覆蓋狀態(tài)或者后臺不可見狀態(tài)乓诽,即第2步和第4步帜羊,系統(tǒng)內(nèi)存不足,殺死當前Activity鸠天,而后用戶退回當前Activity:再次調(diào)用onCreate方法讼育、onStart方法、onResume方法稠集,進入運行狀態(tài)奶段。

7.用戶退出當前Activity:系統(tǒng)先調(diào)用onPause方法,然后調(diào)用onStop方法剥纷,最后調(diào)用onDestory方法痹籍,結(jié)束當前Activity。

除了這7個方法晦鞋,還要在介紹3個方法蹲缠,我個人在覺得還是比較有用的

1、onWindowFocusChanged 在Activity窗口獲得或失去焦點時被調(diào)用悠垛,例如創(chuàng)建時首次呈現(xiàn)在用戶面前线定;當前Activity被其他Activity覆蓋;當前 ? ? ? ? ? Activity轉(zhuǎn)到其他Activity或按Home鍵回到主屏确买,自身退居后臺斤讥;用戶退出當前Activity。以上幾種情況都會調(diào)用湾趾,并且當Activity被創(chuàng)建時是在 ? ? ? ? onResume之后被調(diào)用周偎,當Activity被覆蓋或者退居后臺或者當前Activity退出時抹剩,它是在onPause之后被調(diào)用撑帖,這個方法在某種場合下還是很有 ? ? ? 用的蓉坎,例如程序啟動時想要獲取視特定視圖組件的尺寸大小,在onCreate中可能無法取到胡嘿,因為窗口Window對象還沒創(chuàng)建完成蛉艾,這個時候我 ? ? ? ? 們就需要在onWindowFocusChanged里獲取。

2衷敌、onSaveInstanceState? 在Activity被覆蓋或退居后臺之后勿侯,系統(tǒng)資源不足將其殺死,此方法會被調(diào)用缴罗;在用戶改變屏幕方向時助琐,此方法會被調(diào) ? ? ? ? ? 用;在當前Activity跳轉(zhuǎn)到其他Activity或者按Home鍵回到主屏面氓,自身退居后臺時兵钮,此方法會被調(diào)用。第一種情況我們無法保證什么時候發(fā)生舌界, ? ? ? 系統(tǒng)根據(jù)資源緊張程度去調(diào)度掘譬;第二種是屏幕翻轉(zhuǎn)方向時,系統(tǒng)先銷毀當前的Activity呻拌,然后再重建一個新的葱轩,調(diào)用此方法時,我們可以保存一 ? ? ? 些臨時數(shù)據(jù)藐握;第三種情況系統(tǒng)調(diào)用此方法是為了保存當前窗口各個View組件的狀態(tài)靴拱。onSaveInstanceState的調(diào)用順序是在onPause之前。

3猾普、onRestoreInstanceState? 在Activity被覆蓋或退居后臺之后袜炕,系統(tǒng)資源不足將其殺死,然后用戶又回到了此Activity抬闷,此方法會被調(diào)用妇蛀;在用戶 ? ? ? ? 改變屏幕方向時,重建的過程中笤成,此方法會被調(diào)用评架。我們可以重寫此方法,以便可以恢復一些臨時數(shù)據(jù)炕泳。onRestoreInstanceState的調(diào)用順序 ? ? ? ?是在onStart之后纵诞。

接下來就看Activity的四大啟動模式standard、singleTop培遵、singleTask浙芙、singleInstance

在配置文件中的配置方法是 android:launchMode="你需要的啟動模式"登刺。

1、standard(默認啟動模式)

? ? ? 這個模式是默認的啟動模式嗡呼,即標準模式纸俭,在不指定啟動模式的前提下,系統(tǒng)默認使用該模式啟動Activity南窗,每次啟動一個Activity都會重寫創(chuàng) ? ? ? ? 建一個新的實例揍很,不管這個實例存不存在,這種模式下万伤,誰啟動了該模式的Activity窒悔,該Activity就屬于啟動它的Activity的任務(wù)棧中。這個 ? ? ? ? ? ? ? ?Activity它的onCreate()敌买,onStart()简珠,onResume()方法都會被調(diào)用。

2虹钮、singleTop(棧頂模式)

? ? 這種模式首先會判斷要激活的Activity是否在棧頂聋庵,如果在則不重新創(chuàng)建新的實例,復用當前的實例芜抒,如果不在棧頂珍策,則在任務(wù)棧中創(chuàng)建實例。 ? ? ? 條件是是否在棧頂宅倒,而不是是否在棧中攘宙。注意,如果要激活的Activity在棧頂則直接調(diào)用拐迁,onCreate()蹭劈,onStart()方法不會被調(diào)用,因為它并沒 ? ? ? 有發(fā)生改變线召,如果不在棧頂則會重新創(chuàng)建Acgtivity并且onCreate()铺韧,onStart()方法會執(zhí)行。

注意:standard和singleTop啟動模式都是在原任務(wù)棧中新建Activity實例缓淹。

3哈打、singleTask(棧內(nèi)復用)

? ? ?這種模式啟 動的目標Activity實例如果已經(jīng)存在task容器棧中,不管當前實例處于棧的任何位置讯壶,是棧頂也好空猜,棧底也好提前,還是處于棧中間眷细,只 ? ? ?要目標 Activity實例處于task容器棧中膛虫,都可以重用該Activity實例對象,然后,把處于該Activity實例對象上面全部Activity實 例清除掉氛改,并且帐萎, ? ? ?task容器棧中永遠只有唯一實例對象,不會存在兩個相同的實例對象胜卤。所以疆导,如果你想你的應(yīng)用不管怎么啟動目標Activity,都只有 唯一一個實 ? ? ?例對象瑰艘,就使用這種啟動模式是鬼。

4、singleInstance(單獨一棧)

? ? 該模式具備singleTask模式的所有特性外紫新,與它的區(qū)別就是,這種模式下的Activity會單獨占用一個Task棧李剖,具有全局唯一性芒率,即整個系統(tǒng)中就這么一個實例,由于棧內(nèi)復用的特性篙顺,后續(xù)的請求均不會創(chuàng)建新的Activity實例偶芍,除非這個特殊的任務(wù)棧被銷毀了。以singleInstance模式啟動的Activity在整個系統(tǒng)中是單例的德玫,如果在啟動這樣的Activiyt時匪蟀,已經(jīng)存在了一個實例,那么會把它所在的任務(wù)調(diào)度到前臺宰僧,重用這個實例材彪。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市琴儿,隨后出現(xiàn)的幾起案子段化,更是在濱河造成了極大的恐慌,老刑警劉巖造成,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件显熏,死亡現(xiàn)場離奇詭異,居然都是意外死亡晒屎,警方通過查閱死者的電腦和手機喘蟆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鼓鲁,“玉大人蕴轨,你說我怎么就攤上這事∽” “怎么了尺棋?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我膘螟,道長成福,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任荆残,我火速辦了婚禮奴艾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘内斯。我一直安慰自己蕴潦,他們只是感情好,可當我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布俘闯。 她就那樣靜靜地躺著潭苞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪真朗。 梳的紋絲不亂的頭發(fā)上此疹,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天,我揣著相機與錄音遮婶,去河邊找鬼蝗碎。 笑死,一個胖子當著我的面吹牛旗扑,可吹牛的內(nèi)容都是我干的蹦骑。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼臀防,長吁一口氣:“原來是場噩夢啊……” “哼眠菇!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起清钥,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤琼锋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后祟昭,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缕坎,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年篡悟,在試婚紗的時候發(fā)現(xiàn)自己被綠了谜叹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡搬葬,死狀恐怖荷腊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情急凰,我是刑警寧澤女仰,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響疾忍,放射性物質(zhì)發(fā)生泄漏乔外。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一一罩、第九天 我趴在偏房一處隱蔽的房頂上張望杨幼。 院中可真熱鬧,春花似錦聂渊、人聲如沸差购。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽欲逃。三九已至,卻和暖如春诊胞,著一層夾襖步出監(jiān)牢的瞬間暖夭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工撵孤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人竭望。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓邪码,卻偏偏與公主長得像,于是被迫代替她去往敵國和親咬清。 傳聞我的和親對象是個殘疾皇子闭专,可洞房花燭夜當晚...
    茶點故事閱讀 43,562評論 2 349

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