詳解Android Activity:Activity的生命周期

一胀蛮、正常情況下Activity的生命周期:

Activity的生命周期大概可以歸為三部分

整個的生命周期:onCreate()可以設(shè)置所有的“全局”狀態(tài)验烧, onDestory()可以釋放所有的資源

可見的生命周期:onStart()顯示給用戶的UI數(shù)據(jù)和資源等, onStop()當(dāng)不再需要顯示時候,可以釋放資源

前臺的生命周期:該生命周期活躍甸怕,onResume()回到前臺挠羔,onPause()不可見狀態(tài)或被覆蓋

不要在onCreate()方法中執(zhí)行耗時的操作盖奈,onStart()及onResume()不可進行過多操作宪塔,不然打開桌面應(yīng)用圖標會卡頓磁奖。

Activity生命周期

(1)onCreate:表示Activity正在被創(chuàng)建∧晨穑可以調(diào)用setContentView加載布局資源比搭、初始化各控件、設(shè)置監(jiān)聽南誊、并初始化一些全局的變量身诺。因為在Activity的一次生命周期中,onCreate方法只會執(zhí)行一次抄囚。在Paused和Stopped狀態(tài)下恢復(fù)或重啟的下霉赡,這些控件、監(jiān)聽和全局變量也不會丟失幔托。即便是內(nèi)存不足穴亏,被回收了,再次Recreate的話重挑,又是一次新的生命周期的開始嗓化,又會執(zhí)行onCreate方法。

(2)onRestart:表示Activity正在重新啟動谬哀。當(dāng)處于非棧頂狀態(tài)的活動需要再次返回棧頂蟆湖,展現(xiàn)給用戶的時候,觸發(fā)該方法玻粪。調(diào)用的場景主要有:home鍵之后,然后切換回來诬垂、Activity跳轉(zhuǎn)到另一個Activity之后劲室,按back鍵返回原來Activity。很少調(diào)用结窘,因為它只在onStop之后才可能調(diào)用很洋,所以操作放在onStart方法里面就比較好。

(3)onStart:表示Activity正在啟動隧枫,這時Activity已經(jīng)可見喉磁,但是還沒有出現(xiàn)在前臺谓苟,還無法和用戶交互。

(4)onResume:表示Activity已經(jīng)可見了协怒,并且出現(xiàn)在前臺并開始活動涝焙。

(5)onPause:表示Activity正在停止,正常情況下孕暇,onStop會接著調(diào)用仑撞,但是打開的是透明的Activity,不會調(diào)用onStop妖滔,返回會調(diào)用onResume隧哮。可以執(zhí)行一些輕量級的釋放工作(耗時會影響到新的Activity顯示座舍,onPause必須執(zhí)行完沮翔,新Activity的生命周期才會執(zhí)行)例如:停止動畫、取消broadcast?receivers等曲秉。

(6)onStop:表示Activity將要停止采蚀,極有可能被系統(tǒng)所回收,在某些極端情況下岸浑,系統(tǒng)可能是直接殺死應(yīng)用程序的進程搏存,而不是調(diào)用onDestory方法,所以我們需要在onStop方法中盡可能的釋放那些用戶暫時不需要使用的資源矢洲,防止內(nèi)存泄露璧眠。可以做一些稍微重量級的回收工作读虏,例如:數(shù)據(jù)保存责静,需要用到的數(shù)據(jù)庫操作。

(7)onDestory:表示Activity將被銷毀盖桥,確定某些資源是否沒有被釋放灾螃,做一些最終的清理工作,比如在這個Activity的onCreate中開啟的某個線程揩徊,那么就要在onDestory中確定它是否結(jié)束了腰鬼,如果沒有,就結(jié)束它塑荒。

幾種生命周期流程的情況:

(1)現(xiàn)在有兩個Activity熄赡,A 和B,都重寫了所有的生命周期方法齿税。

進入A彼硫,回調(diào):AonCreate-->AonStart-->AonResume。返回桌面:AAonPause-->AonStop。

點擊按鈕進入B,回調(diào):AonPause-->BonCreate-->BonStart-->BonResume-->AonStop拧篮。

按下back鍵词渤,回調(diào):BonPause-->AonRestart-->AonStart-->AonResume-->BonStop-->BonDestory

(2)啟動對話框樣式的Activity,有兩個Activity串绩,A

和B(對話框式Activity)缺虐。

從A進入B,回調(diào):AonPause-->BonCreate-->BonStart-->BonResume赏参,并不會調(diào)用onStop志笼。

按下back鍵,BonPause-->AonRestart-->AonStart-->AonResume-->BonStop-->BonDestory回調(diào):BonPause-->AonResume-->BonStop-->BonDestory把篓。

啟動對話框并不會有生命周期的變化纫溃,這里啟動的是透明主題的Activity。

二韧掩、關(guān)于SaveStateInstance

系統(tǒng)配置發(fā)生改變后或內(nèi)存瓶頸時紊浩,生命周期發(fā)生異常,會調(diào)用onSaveInstanceState和onRestoreInstanceState這兩兄弟疗锐,這就很好的解決Android應(yīng)用的內(nèi)存問題坊谁。

旋轉(zhuǎn)屏幕時,生命周期大概如下圖(若不想滑臊,可在清單文件設(shè)置android:configChanges="orientation|keyboardHidden|locale")

Activity生命周期

onSaveInstanceState:在Activity(onStop之前)被回收之前口芍,系統(tǒng)會調(diào)用onSaveInstanceState(Bundle outState)來保存View的狀態(tài),并到傳入的outState對象中雇卷。

onRestoreInstanceState:在Activity被重新創(chuàng)建時鬓椭,會通過onCreate(Bundle savedInstanceState)和onRestoreInstanceState(Bundle savedInstanceState)傳入保存的狀態(tài)信息并恢復(fù)View的狀態(tài)。(onCreate主要重建Fragment关划、onRestoreInstanceState恢復(fù)Window狀態(tài))

View控件的狀態(tài)被保存需要滿足兩個條件:

1小染、View有唯一的ID;

2贮折、View的初始化時要調(diào)用setSaveEnabled(true)

View控件恢復(fù)的注意三點:

1裤翩、如果id重復(fù),則View的狀態(tài)會被覆蓋

2调榄、被保存的Fragment會在onCreate中被自動創(chuàng)建和添加到FragmentActivity中

3踊赠、被保存的View不會被自動創(chuàng)建,只是通過id獲取savedInstance用于更新View

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末每庆,一起剝皮案震驚了整個濱河市臼疫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌扣孟,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荣赶,死亡現(xiàn)場離奇詭異凤价,居然都是意外死亡鸽斟,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門利诺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來富蓄,“玉大人,你說我怎么就攤上這事慢逾×⒈叮” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵侣滩,是天一觀的道長口注。 經(jīng)常有香客問我,道長君珠,這世上最難降的妖魔是什么寝志? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮策添,結(jié)果婚禮上材部,老公的妹妹穿的比我還像新娘。我一直安慰自己唯竹,他們只是感情好乐导,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著浸颓,像睡著了一般物臂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上猾愿,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天鹦聪,我揣著相機與錄音,去河邊找鬼蒂秘。 笑死泽本,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的姻僧。 我是一名探鬼主播规丽,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼撇贺!你這毒婦竟也來了赌莺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤松嘶,失蹤者是張志新(化名)和其女友劉穎艘狭,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡巢音,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年遵倦,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片官撼。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡梧躺,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出傲绣,到底是詐尸還是另有隱情掠哥,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布秃诵,位于F島的核電站续搀,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏顷链。R本人自食惡果不足惜目代,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嗤练。 院中可真熱鬧榛了,春花似錦、人聲如沸煞抬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽革答。三九已至战坤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間残拐,已是汗流浹背途茫。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留溪食,地道東北人囊卜。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像错沃,于是被迫代替她去往敵國和親栅组。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

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