Android:Activity生命周期事件的幾個(gè)小細(xì)節(jié)

Activity跳轉(zhuǎn)生命周期事件您清楚嗎播急?

最近在面試的過(guò)程中,發(fā)現(xiàn)一些小朋友對(duì)Activity生命周期事件掌握的還不是特別牢固。當(dāng)然伏伐,這里我指的不是單個(gè)Activity的生命周期事件,而是從一個(gè)Acitivty跳轉(zhuǎn)到另外一個(gè)Activity的時(shí)候晕拆,2個(gè)Activity的生命周期事件是按照什么順序發(fā)生的藐翎。

單個(gè)Activity的生命周期事件

這個(gè)大家都知道材蹬,在這里就簡(jiǎn)單列一下:

Activity啟動(dòng)的時(shí)候:onCreate() -> onStart() -> onResume()
Activity退出的時(shí)候:onPause()-> onStop()-> onDestroy()

從ActivityA跳轉(zhuǎn)到ActivityB的生命周期事件

如果兩個(gè)Activity事件攪和在一起,您能確定它們的事件順序嗎吝镣?

首先堤器,看看從ActivityA跳轉(zhuǎn)到ActivityB的事件:


從ActivityA跳轉(zhuǎn)到ActivityB的事件

通過(guò)上圖可以清晰的看到,當(dāng)從ActivityA跳轉(zhuǎn)到ActivityB的的時(shí)候末贾,首先執(zhí)行的是ActivityA的onPause()方法闸溃,然后是ActivityB的一系列生命周期方法,最后再是ActivityA的onStop()方法拱撵。ActivityA的onDestroy()方法不會(huì)被調(diào)用辉川。

看看用戶從ActivityB返回ActivityA的情況:


從ActivityB返回ActivityA

ActivityB的onPause()方法先被調(diào)用,然后是ActivityA的生命周期方法拴测,當(dāng)ActivityA的onResume()執(zhí)行之后乓旗,ActivityB的onStop()onDestroy()會(huì)被調(diào)用。

生命周期事件背后的設(shè)計(jì)思想

其實(shí)集索,要記住以上事件的順序不是什么難事屿愚。但是重要的是,我們需要考慮:Android為什么會(huì)這樣設(shè)計(jì)务荆?

為什么不管是跳轉(zhuǎn)還是返回妆距,都是當(dāng)前Activity的onPause()方法先被調(diào)用?

為什么不管是跳轉(zhuǎn)還是返回蛹含,前一個(gè)Activity的onStop()方法總是在新的Activity的onResume()方法后被調(diào)用毅厚?

其實(shí),這背后隱藏著一個(gè)重要的Android設(shè)計(jì)思想:在任何時(shí)候浦箱,都是UI優(yōu)先吸耿。保證用戶體驗(yàn)永遠(yuǎn)是第一位的。

以跳轉(zhuǎn)為例酷窥,當(dāng)Activity發(fā)生跳轉(zhuǎn)的時(shí)候咽安,第一個(gè)事件肯定是要交給當(dāng)前處于前臺(tái)的ActivityA,這樣可以保證UI事件可以第一時(shí)間執(zhí)行蓬推。然后妆棒,再執(zhí)行ActivityB的生命周期事件,當(dāng)ActivityB已經(jīng)出現(xiàn)在前臺(tái)之后沸伏,再調(diào)用ActivityA的onStop()方法糕珊,因?yàn)榇藭r(shí)ActivityA已經(jīng)在后臺(tái)了,所以onStop()不會(huì)影響到前臺(tái)的用戶體驗(yàn)毅糟。

onPause()和onStop()的區(qū)別

在日常開(kāi)發(fā)中红选,很多同學(xué)對(duì)這兩個(gè)方法都是混著用的,沒(méi)有想的特別清楚姆另。實(shí)際上喇肋,根據(jù)上面的分析坟乾,這兩個(gè)方法還是有一定區(qū)別的:

首先,onPause()方法是跳轉(zhuǎn)前的第一個(gè)方法蝶防,所以在這個(gè)方法里面一定不能做耗時(shí)的操作甚侣,否則會(huì)影響下一個(gè)Activity的出現(xiàn),讓用戶覺(jué)得不流暢间学。

而ActivityA的onStop()方法被調(diào)用的時(shí)候殷费,ActivityB已經(jīng)在前臺(tái)了,所以可以在onStop()方法里做一些清理的工作菱鸥,不會(huì)影響到用戶的體驗(yàn)宗兼。

onSaveInstanceState()方法的調(diào)用時(shí)機(jī)

Android里onSaveInstanceState()的調(diào)用時(shí)機(jī)也是讓人比較困惑的事情。首先氮采,onSaveInstanceState()并不是Activity的生命周期方法殷绍,這意味著這個(gè)方法不是總會(huì)被調(diào)用的。只有在Activity可能會(huì)被系統(tǒng)銷毀的時(shí)候才可能被調(diào)用鹊漠。

拿上面的例子來(lái)說(shuō)主到,從ActivityA跳轉(zhuǎn)到ActivityB,ActivityA被壓在ActivityB下面躯概,這種情況可能會(huì)被系統(tǒng)銷毀登钥,所以onSaveInstanceState()會(huì)被調(diào)用。如果在ActivityB的頁(yè)面里用戶按Home退出娶靡,onSaveInstanceState()也是會(huì)被調(diào)用的牧牢。

相反的,如果用戶在ActivityB頁(yè)面按Back鍵返回ActivityA姿锭,此時(shí)塔鳍,ActivityB的onSaveInstanceState()是不會(huì)被調(diào)用的。

再說(shuō)從ActivityA跳轉(zhuǎn)到ActivityB的時(shí)候呻此,還有個(gè)很奇怪的情況:

在Android P之前轮纫,ActivityA的onSaveInstanceState()是在onStop()之前被調(diào)用的,而且和ActivityA的onPause()的調(diào)用誰(shuí)先誰(shuí)后不確定焚鲜!

在Android P及之后掌唾,onSaveInstanceState()是在onStop()之后被調(diào)用的。

下面是官方的解釋:

If called, this method will occur after onStop() for applications targeting platforms starting with Build.VERSION_CODES.P. For applications targeting earlier platform versions this method will occur before onStop() and there are no guarantees about whether it will occur before or after onPause().

總結(jié)

Android的生命周期方法忿磅,其實(shí)是很基礎(chǔ)的知識(shí)糯彬。但是細(xì)摳的話,還是有不少細(xì)節(jié)的葱她。

最后情连,還是拿這張大家都看過(guò)的圖來(lái)鎮(zhèn)樓:


Activity的生命周期
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市览效,隨后出現(xiàn)的幾起案子却舀,更是在濱河造成了極大的恐慌,老刑警劉巖锤灿,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挽拔,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡但校,警方通過(guò)查閱死者的電腦和手機(jī)螃诅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)状囱,“玉大人术裸,你說(shuō)我怎么就攤上這事⊥ぜ希” “怎么了袭艺?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)叨粘。 經(jīng)常有香客問(wèn)我猾编,道長(zhǎng),這世上最難降的妖魔是什么升敲? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任答倡,我火速辦了婚禮,結(jié)果婚禮上驴党,老公的妹妹穿的比我還像新娘瘪撇。我一直安慰自己,他們只是感情好港庄,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布倔既。 她就那樣靜靜地躺著,像睡著了一般攘轩。 火紅的嫁衣襯著肌膚如雪叉存。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,071評(píng)論 1 285
  • 那天度帮,我揣著相機(jī)與錄音歼捏,去河邊找鬼。 笑死笨篷,一個(gè)胖子當(dāng)著我的面吹牛瞳秽,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播率翅,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼练俐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了冕臭?” 一聲冷哼從身側(cè)響起腺晾,我...
    開(kāi)封第一講書(shū)人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤燕锥,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后悯蝉,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體归形,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年鼻由,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了暇榴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蕉世,死狀恐怖蔼紧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情狠轻,我是刑警寧澤奸例,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站哈误,受9級(jí)特大地震影響哩至,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蜜自,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一菩貌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧重荠,春花似錦箭阶、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至婆殿,卻和暖如春诈乒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背婆芦。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工怕磨, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人消约。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓肠鲫,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親或粮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子导饲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

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

  • Android的開(kāi)發(fā)中我們大部分都是和Activity打交道,而想很好的運(yùn)用Activity首先必須要清楚Acti...
    云天隨筆閱讀 1,205評(píng)論 0 1
  • 轉(zhuǎn)載請(qǐng)注明出處:http://www.reibang.com/p/1449e3ec2720 生命周期是個(gè)老生常談的...
    landptf閱讀 778評(píng)論 1 3
  • 說(shuō)起Activity大家都不陌生,它主要是跟用戶去打交道渣锦,其實(shí)硝岗,它并不僅僅將視圖顯示給用戶,它的背后隱藏的很大的知...
    ReturnYHH閱讀 796評(píng)論 0 5
  • 生命周期 關(guān)于Activity的生命周期相信不少人都覺(jué)得自己很了解了袋毙,畢竟大多數(shù)入門(mén)的時(shí)候都會(huì)首先學(xué)這個(gè)辈讶,但事實(shí)真...
    斷了誰(shuí)的弦閱讀 1,885評(píng)論 0 1
  • 上次跑步是什么時(shí)候呢? 應(yīng)該是大學(xué)娄猫,大學(xué)特別喜歡夜跑,操場(chǎng)上一圈一圈又一圈生闲,把煩惱跑沒(méi)媳溺。 夜,是靜謐的碍讯。 夜像是你...
    Amoy_Amon閱讀 156評(píng)論 4 0