引言
??一般面試中總會問到Activity在跳轉(zhuǎn)時的生命周期的變化情況萎坷,今天我們就來一篇文章解決它稀余!讓你在面試的時候不再手忙腳亂国葬!
??看完答案后請認真看解析及舍,因為知道答案不是我們的目的未辆,往往能搞清楚為什么才更為重要,授人以魚不如授人以漁的道理希望大家都能懂得锯玛。
生命周期(5種狀態(tài)+7個方法)
5種狀態(tài)
分別是:啟動狀態(tài)咐柜,運行狀態(tài),暫停狀態(tài)更振,停止狀態(tài)炕桨,銷毀狀態(tài)。
7個方法
onCreate():在Activity創(chuàng)建時調(diào)用肯腕。
onStart():在Activity即將可見時調(diào)用献宫。
onResume():在Activity獲取焦點開始與用戶交互時調(diào)用,也就是可見時調(diào)用实撒。
onPause():在當(dāng)前Activity被其他Activity覆蓋或鎖屏?xí)r調(diào)用姊途。
onStop():在Activity對用戶不可見時調(diào)用。
onDestroy():在Activity銷毀時調(diào)用知态。
onRestart():在Activity從停止狀態(tài)再次啟動時調(diào)用捷兰。
答案
(1)當(dāng)前activityA啟動時調(diào)用:
==>>onCreate: A
==>>onStart: A
==>>onResume: A
(2)跳轉(zhuǎn)到另一個activityB時調(diào)用:
==>>onPause:A
==>>onCreate: B
==>>onStart: B
==>>onResume: B
==>>onStop: A
(3)返回activityA時調(diào)用:
==>>onPause: B
==>>onRestart: A
==>>onStart: A
==>>onResume: A
==>>onStop: B
==>>onDestroy: B
(4)關(guān)閉activityA,整個過程結(jié)束
==>>onPause: A
==>>onStop: A
==>>onDestroy: A
解析
第一:每個Activity中onCreate()方法只調(diào)用一次负敏,就是創(chuàng)建它的時候調(diào)用贡茅,直到它被銷毀。
第二:通常onStart()和onResume方法連起來調(diào)用其做,因為一個時即將可見時被調(diào)用顶考,一個是可見時被調(diào)用。
第三:當(dāng)跳轉(zhuǎn)到activityB時妖泄,總是要等到前一個activityA的onPause()方法調(diào)用完成驹沿,A進入停止狀態(tài)后,才能創(chuàng)建和
執(zhí)行activityB蹈胡。
第四:當(dāng)跳轉(zhuǎn)到前一個activityA時渊季,總是要等到當(dāng)前activityB的onResume方法執(zhí)行完后才會返回前一個activityA的生
命周期繼續(xù)執(zhí)行。
第五:當(dāng)從其他activityB返回當(dāng)前activityA時罚渐,不再調(diào)用onCreate()方法却汉,而是調(diào)用onRestart()方法,且總是要在在onSart()之前就被調(diào)用荷并。
第六:當(dāng)一個activityB的生命周期結(jié)束病涨,因為它并沒有其他操作,是由A喚醒創(chuàng)建并返回A璧坟,所以當(dāng)activityA再次對于用戶處于可見時既穆,activityB從可見態(tài)變化為停止狀態(tài)調(diào)用:onStop(),再變?yōu)殇N毀狀態(tài)調(diào)用:onDestroy()雀鹃。
第七:當(dāng)一個activity的生命周期結(jié)束幻工,它需要從執(zhí)行狀態(tài)變?yōu)橥V範顟B(tài),再變?yōu)殇N毀狀態(tài)黎茎,回收內(nèi)存(activityA)囊颅。
面試官追問:為什么不先調(diào)用前一個activityA的onStop()方法后再執(zhí)行activityB的方法?傅瞻?踢代?
答:因為有時候在onStop()方法中需要執(zhí)行一些耗時操作,假設(shè)onStop()先被調(diào)用嗅骄,那么要跳轉(zhuǎn)到B就必須要等待A的任務(wù)執(zhí)行完胳挎,影響頁面的跳轉(zhuǎn),所以先onPause()等B一系列方法執(zhí)行完后再調(diào)用A的onStop()方法溺森。
Tips:
(1)有時候 Activity的重建慕爬,會在 onStop方法中 保存數(shù)據(jù) 這也是個耗時操作;
(2)系統(tǒng)也是這樣設(shè)計的。startActivity流程中屏积,先執(zhí)行任務(wù)棧頂Activity的onPause()医窿,在執(zhí)行目標Activity的 onCreate onStart onResume 然后在執(zhí)行 之前Activity的onStop