引言
說到Activity,就會想到它的聲明周期,面試官也經(jīng)常會問。所以我們來說明一下碍侦。
聲明周期
activity_lifecycle.png
除了上圖還有四個回調(diào)方法,如下:
- onContentChanged
- onPostCreate
- onPostResume
- onConfigurationChanged
綜合起來一共11個方法瓷产,我們按照觸發(fā)順序說明:
- onCreate()
初始化Activity數(shù)據(jù),同時setConentView(view),設置好布局株旷。 - onContentChanged
當Activity布局變動的時候觸發(fā),setContentView 和 addContentView 方法執(zhí)行完畢后調(diào)用該方法,onCreate方法中有setContentView尔邓,所以會觸發(fā)此方法。 - onPostCreate()
當onCreate()方法執(zhí)行完畢后觸發(fā)钞瀑。 - onStart()
調(diào)用這個方法的時候慷荔,界面被用戶所看見缠俺,但是不能交互即點擊啊什么的贷岸。 - onResume()
可見且可以進行交互,執(zhí)行這個方法后,Activity就會處于running狀態(tài)。 - onPause()
整個窗口被半遮蓋或者半透明的時候會執(zhí)行這個方法,即當你想離開這個Activity,或者想進入下一個Activity,處于半遮蓋或者半透明狀態(tài)就會被調(diào)用躏救。 - onPostPause()
和onPostCreate()類似螟蒸,也是當onPause()執(zhí)行完畢后調(diào)用此方法徹底執(zhí)行完畢的回調(diào)。 - onStop()
當Activity整個窗口都被遮蓋的時候會被觸發(fā)少办。當然完全被遮蓋之前肯定會經(jīng)歷半遮蓋的過程诵原,所以onPause()方法肯定先被調(diào)用。 - onDestory()
在這里做資源的回收與銷毀,引用在這時候會被自動回收且銷毀蔓纠,但是線程不會被自動回收吗蚌,所以你需要手動在這個方法中清楚開啟的線程,或者其他資源敷燎。
注意點
- 當處于半透明侮措,半遮蓋狀態(tài)的時候,又回到Activity,就會重回界面澄成,即會執(zhí)行onResume()方法畏吓。
- 當處于全遮蓋的時候,即執(zhí)行完onStop()方法后肾砂,又重回界面宏悦,這時候就會調(diào)用onRestart()方法包吝,再執(zhí)行onStart()方法源葫,onResume()重新回到界面。
- 還有ANR問題,當處于onPause(),onStop即全遮蓋或者半遮蓋狀態(tài)的時候嚷狞,內(nèi)存占用過多荣堰,Activity就有可能被回收,回收后重新回到Activity,就會執(zhí)行onCreate()方法執(zhí)行Activity的聲明周期薇搁。
總結(jié)
- 靈活運用聲明周期屡拨,可以做到很舒服的用戶體驗褥实。