Activity的生命周期

一毯盈、基礎(chǔ)

1.1自己創(chuàng)建的activity必須要繼承類Activity(或其子類)剃毒。在activity里,為了實(shí)現(xiàn)activity各種狀態(tài)的切換奶镶,你必須實(shí)現(xiàn)指定的回調(diào)方法迟赃。以下是最為重要的兩個(gè)回調(diào)方法

onCreate():

這是必須實(shí)現(xiàn)的回調(diào)方法,啟動(dòng)一個(gè) activity時(shí)會(huì)首先調(diào)用此方法厂镇。因此,在onCreate()的方法體里左刽,你應(yīng)該初始化該activity必要的控件捺信。值得注意的是,在這里你必須調(diào)用setContentView(View view)方法去呈現(xiàn)用戶的界面。

onPause():

在用戶將要離開activity時(shí)調(diào)用此方法(指的是此時(shí)activity處于半透明狀態(tài)且沒有獲取用戶的焦點(diǎn))迄靠。通常在這樣的狀態(tài)下秒咨,你需要處理用戶數(shù)據(jù)的提交、動(dòng)畫處理等操作掌挚。

1.2銷毀activity

你可以調(diào)用finish()方法去銷毀一個(gè)activity雨席。同樣得,你可以調(diào)用finishActivity()方法去銷毀一個(gè)你剛剛啟動(dòng)的activity吠式。

tips:

在多數(shù)情況下陡厘,你是不需要顯式地調(diào)用finish…()方法去銷毀一個(gè)activity。在將要討論到的activity生命周期里特占,你可以知道糙置,Android系統(tǒng)會(huì)為你管理activity的生命周期,所以你并不需要顯式銷毀activity(即調(diào)用finish類方法)是目。顯式地調(diào)用finish類方法谤饭,會(huì)對用戶的體驗(yàn)產(chǎn)生不利的影響,除非你確實(shí)是不希望用戶返回到此activity(界面)懊纳,才去顯式調(diào)用finish類方法揉抵。

二、認(rèn)識(shí)activity的生命周期

2嗤疯、1

Activity的生命周期對它的任務(wù)功舀、backstack和與此有關(guān)聯(lián)的activity有著直接的影響。因此想開發(fā)出一個(gè)健壯的有彈性的Android程序身弊,你需要學(xué)會(huì)如何去管理activity的生命周期(即調(diào)用各種回調(diào)方法)辟汰。

activity的生命周期主要包含一些三種狀態(tài):

(1)運(yùn)行態(tài)(Resumedstate)

此時(shí)Activity程序顯示在屏幕前臺(tái),并且具有焦點(diǎn)阱佛,可以與用戶的操作進(jìn)行交互帖汞,如向用戶提供信息、捕獲用戶單擊按鈕的事件并做處理凑术。

(2)暫停態(tài)(PausedState)

此時(shí)Activity程序失去了焦點(diǎn)翩蘸,并被其他處于運(yùn)行態(tài)的otherActivity取代在屏幕顯示,但otherActivity程序并沒有覆蓋整個(gè)屏幕或者具有半透明的效果—此狀態(tài)即為暫停態(tài)淮逊。處于暫停態(tài)的Activity仍然對用戶可見催首,并且是完全存活的(此時(shí)Activity對象存留在內(nèi)存里,保留著所有狀態(tài)與成員信息并保持與窗口管理器的連接)泄鹏。如果系統(tǒng)處于內(nèi)存不足的情況下郎任,會(huì)殺死這個(gè)Activity。

(3)停止態(tài)(StoppedState)

當(dāng)Activity完全被另一個(gè)otherActivity覆蓋時(shí)(此時(shí)otherActivity顯示在屏幕前臺(tái))备籽,則處于停止態(tài)舶治。處于停滯態(tài)的Activity依然是存活的(此時(shí)Activity對象依然存留在內(nèi)存里,保留著所有的狀態(tài)和與成員信息,但沒有與窗口管理器保持連接)霉猛,而且它對用戶是不可見的尺锚,如果其他地方需要內(nèi)存,系統(tǒng)會(huì)銷毀這個(gè)Activity惜浅。

處于暫停態(tài)(PausedState)或者停止態(tài)(Stopped

State)的Activity瘫辩,系統(tǒng)可以通過調(diào)用finish()方法或者直接終止它的進(jìn)程來銷毀此Activity(從內(nèi)存中清楚此Activity對象)。被finish()或者銷毀的Activity再重新打開時(shí)坛悉,是需要再次初始化此Activity的伐厌。

2、2

當(dāng)一個(gè)Activity從一種狀態(tài)轉(zhuǎn)到另一種狀態(tài)時(shí)吹散,會(huì)通過調(diào)用回調(diào)方法來通知這種變化弧械。這些回調(diào)方法都是可以重寫的,你可以根據(jù)程序的的需要來選擇重寫對應(yīng)的回調(diào)方法空民。以下列出了Activity生命周期里的基本回調(diào)方法:


第三步:運(yùn)行上述工程,效果圖如下(沒什么特別的):

打開應(yīng)用時(shí)先后執(zhí)行了onCreate()->onStart()->onResume三個(gè)方法刃唐,看一下LogCat視窗如下:

BACK鍵:當(dāng)我們按BACK鍵時(shí),我們這個(gè)應(yīng)用程序?qū)⒔Y(jié)束界轩,這時(shí)候我們將先后調(diào)用onPause()->onStop()->onDestory()三個(gè)方法画饥,如下圖所示:

HOME鍵:當(dāng)我們打開應(yīng)用程序時(shí),比如瀏覽器浊猾,我正在瀏覽NBA新聞抖甘,看到一半時(shí),我突然想聽歌葫慎,這時(shí)候我們會(huì)選擇按HOME鍵衔彻,然后去打開音樂應(yīng)用程序,而當(dāng)我們按HOME的時(shí)候偷办,Activity先后執(zhí)行了onPause()->onStop()這兩個(gè)方法艰额,這時(shí)候應(yīng)用程序并沒有銷毀。如下圖所示:

而當(dāng)我們再次啟動(dòng)ActivityDemo應(yīng)用程序時(shí)椒涯,則先后分別執(zhí)行了onRestart()->onStart()->onResume()三個(gè)方法柄沮,如下圖所示:

筆記:在方法體里,必須先調(diào)用父類對應(yīng)的實(shí)現(xiàn)方法super.Xxx()废岂,再執(zhí)行其他的操作(如上面代碼所示)祖搓。為了習(xí)慣,下面也提供一些代碼來測試一些這些方法的使用湖苞,在博客的最后面拯欧。

總的來說,這些回調(diào)方法定義了Activity整個(gè)生命周期袒啼。在生命周期里通過重寫這些回調(diào)方法哈扮,纬纪,你可以監(jiān)控以下下三個(gè)嵌套的方法循環(huán)蚓再。

完整存活的時(shí)間:

Activity的完整存活的時(shí)間是自第一次調(diào)用onCreate()開始滑肉,直至調(diào)用onDestroy()為止。Activity在onCreate()中設(shè)置所有“全局”狀態(tài)以完成初始化摘仅,而在onDestroy()中釋放所有系統(tǒng)資源靶庙。例如,如果Activity有一個(gè)線程在后臺(tái)運(yùn)行從網(wǎng)絡(luò)下載數(shù)據(jù)娃属,它會(huì)在onCreate()創(chuàng)建線程六荒,而在 onDestroy()銷毀線程。

可見狀態(tài)的時(shí)間:

Activity的可見狀態(tài)是自onStart()調(diào)用開始直到相應(yīng)的onStop()調(diào)用結(jié)束矾端。在此期間掏击,用戶可以在屏幕上看到Activity,盡管它也許并不是位于前臺(tái)或者也不與用戶進(jìn)行交互秩铆。在這兩個(gè)方法之間砚亭,我們可以保留用來向用戶顯示這個(gè)Activity所需的資源。

例如殴玛,當(dāng)用戶不再看見我們顯示的內(nèi)容時(shí)捅膘,我們可以在onStart()中注冊一個(gè)BroadcastReceiver來監(jiān)控會(huì)影響UI的變化,而在onStop()中來注消滚粟。onStart() 和 onStop() 方法可以隨著應(yīng)用程序是否為用戶可見而被多次調(diào)用寻仗。

顯示在前臺(tái)的時(shí)間:

Activity的前臺(tái)顯示是自onResume()調(diào)用起,至相應(yīng)的onPause()調(diào)用為止凡壤。在此期間署尤,Activity位于前臺(tái)最上面并與用戶進(jìn)行交互。Activity會(huì)經(jīng)常在暫停和恢復(fù)之間進(jìn)行狀態(tài)轉(zhuǎn)換——例如當(dāng)設(shè)備轉(zhuǎn)入休眠狀態(tài)或者有新的Activity啟動(dòng)時(shí)亚侠,將調(diào)用onPause() 方法曹体。當(dāng)Activity獲得結(jié)果或者接收到新的Intent時(shí)會(huì)調(diào)用onResume() 方法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末盖奈,一起剝皮案震驚了整個(gè)濱河市混坞,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌钢坦,老刑警劉巖究孕,帶你破解...
    沈念sama閱讀 216,744評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異爹凹,居然都是意外死亡厨诸,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,505評論 3 392
  • 文/潘曉璐 我一進(jìn)店門禾酱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來微酬,“玉大人绘趋,你說我怎么就攤上這事】殴埽” “怎么了陷遮?”我有些...
    開封第一講書人閱讀 163,105評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長垦江。 經(jīng)常有香客問我帽馋,道長,這世上最難降的妖魔是什么比吭? 我笑而不...
    開封第一講書人閱讀 58,242評論 1 292
  • 正文 為了忘掉前任绽族,我火速辦了婚禮,結(jié)果婚禮上衩藤,老公的妹妹穿的比我還像新娘吧慢。我一直安慰自己,他們只是感情好赏表,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,269評論 6 389
  • 文/花漫 我一把揭開白布检诗。 她就那樣靜靜地躺著,像睡著了一般底哗。 火紅的嫁衣襯著肌膚如雪岁诉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,215評論 1 299
  • 那天跋选,我揣著相機(jī)與錄音涕癣,去河邊找鬼。 笑死前标,一個(gè)胖子當(dāng)著我的面吹牛坠韩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播炼列,決...
    沈念sama閱讀 40,096評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼只搁,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了俭尖?” 一聲冷哼從身側(cè)響起氢惋,我...
    開封第一講書人閱讀 38,939評論 0 274
  • 序言:老撾萬榮一對情侶失蹤亏狰,失蹤者是張志新(化名)和其女友劉穎检号,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體曲秉,經(jīng)...
    沈念sama閱讀 45,354評論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡已亥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,573評論 2 333
  • 正文 我和宋清朗相戀三年熊赖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虑椎。...
    茶點(diǎn)故事閱讀 39,745評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡震鹉,死狀恐怖俱笛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情传趾,我是刑警寧澤迎膜,帶...
    沈念sama閱讀 35,448評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站墨缘,受9級(jí)特大地震影響星虹,放射性物質(zhì)發(fā)生泄漏零抬。R本人自食惡果不足惜镊讼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,048評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望平夜。 院中可真熱鬧蝶棋,春花似錦、人聲如沸忽妒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,683評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽段直。三九已至吃溅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鸯檬,已是汗流浹背决侈。 一陣腳步聲響...
    開封第一講書人閱讀 32,838評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留喧务,地道東北人赖歌。 一個(gè)月前我還...
    沈念sama閱讀 47,776評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像功茴,于是被迫代替她去往敵國和親庐冯。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,652評論 2 354

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

  • 啟動(dòng)與銷毀Activity 不同于使用 main() 方法啟動(dòng)應(yīng)用的其他編程范例坎穿,Android 系統(tǒng)會(huì)通過調(diào)用對...
    安卓Boy閱讀 1,775評論 3 5
  • 啟動(dòng)與銷毀Activity 不同于使用 main() 方法啟動(dòng)應(yīng)用的其他編程范例展父,Android 系統(tǒng)會(huì)通過調(diào)用對...
    mouekz閱讀 646評論 0 0
  • 您的應(yīng)用中的Activity應(yīng)該做到如下需求: 1.用戶在使用應(yīng)用時(shí)接聽來電或切換到另一個(gè)應(yīng)用,它不會(huì)崩潰玲昧。 2....
    正陽Android閱讀 530評論 1 0
  • Android的開發(fā)中我們大部分都是和Activity打交道栖茉,而想很好的運(yùn)用Activity首先必須要清楚Acti...
    云天隨筆閱讀 1,212評論 0 1
  • 1 《爸爸去哪兒5》熱播衡载,第三季的人氣小嘉賓軒軒,以“村長助理”的身份回歸隙袁,重新回到大眾的視野痰娱。 胖軒的卷發(fā)不見了...
    Angela在悉尼閱讀 6,738評論 12 136