引言
說到Activity,就會想到它的聲明周期,面試官也經常會問。所以我們來說明一下。
聲明周期

activity_lifecycle.png
除了上圖還有四個回調方法,如下:
- onContentChanged
- onPostCreate
- onPostResume
- onConfigurationChanged
綜合起來一共11個方法,我們按照觸發(fā)順序說明:
- onCreate()
初始化Activity數(shù)據(jù),同時setConentView(view),設置好布局。 - onContentChanged
當Activity布局變動的時候觸發(fā),setContentView 和 addContentView 方法執(zhí)行完畢后調用該方法,onCreate方法中有setContentView,所以會觸發(fā)此方法。 - onPostCreate()
當onCreate()方法執(zhí)行完畢后觸發(fā)。 - onStart()
調用這個方法的時候,界面被用戶所看見,但是不能交互即點擊啊什么的。 - onResume()
可見且可以進行交互,執(zhí)行這個方法后,Activity就會處于running狀態(tài)。 - onPause()
整個窗口被半遮蓋或者半透明的時候會執(zhí)行這個方法,即當你想離開這個Activity,或者想進入下一個Activity,處于半遮蓋或者半透明狀態(tài)就會被調用。 - onPostPause()
和onPostCreate()類似,也是當onPause()執(zhí)行完畢后調用此方法徹底執(zhí)行完畢的回調。 - onStop()
當Activity整個窗口都被遮蓋的時候會被觸發(fā)。當然完全被遮蓋之前肯定會經歷半遮蓋的過程,所以onPause()方法肯定先被調用。 - onDestory()
在這里做資源的回收與銷毀,引用在這時候會被自動回收且銷毀,但是線程不會被自動回收,所以你需要手動在這個方法中清楚開啟的線程,或者其他資源。
注意點
- 當處于半透明,半遮蓋狀態(tài)的時候,又回到Activity,就會重回界面,即會執(zhí)行onResume()方法。
- 當處于全遮蓋的時候,即執(zhí)行完onStop()方法后,又重回界面,這時候就會調用onRestart()方法,再執(zhí)行onStart()方法,onResume()重新回到界面。
- 還有ANR問題,當處于onPause(),onStop即全遮蓋或者半遮蓋狀態(tài)的時候,內存占用過多,Activity就有可能被回收,回收后重新回到Activity,就會執(zhí)行onCreate()方法執(zhí)行Activity的聲明周期。
總結
- 靈活運用聲明周期,可以做到很舒服的用戶體驗。