不詩意的女程序媛不是好廚師~
轉載請註明出處,From李詩雨—https://blog.csdn.net/cjm2484836553/article/details/105136551
《Android面試專題系列三》Activity的生命週期
這是一個很老很老的問題,但是每次面試又經常遇到。
我們到底該怎樣回答,才比較優雅又全面呢?
1.正常情況下Activity的生命週期。
1.1先說圖中的主線.
即先說一個activity從它打開 到它看不見 再到它銷燬的完整流程。
當我去啓動一個activity的時候,
-
Activity首先執行的是onCreat()方法,一般來說我們主要在這個方法中進行一些初始化工作,比如說setContentView, setContent, layout, 以及第三方sdk的註冊等等。
當然,我們的初始化工作,還是建議使用延遲加載或者懶加載的方式,我們的onCreat()儘可能還是事情做得少一點,這樣我們的應用會啓動的快一些。
-
onCreat()完成以後,我們的Activity就會進入onStart()狀態。onStart()其實也可以進行一些初始化的工作。(可以注意區別)
-
onStart()執行完以後,界面就可見了,也可以進行交互了,這個時候會走到onResume()方法。onResume()方法主要是用在 我們的activity退入後臺又重新恢復的時候,做一些數據恢復或者相關工作的。
-
此時當我們點擊返回鍵時,當前的activity會慢慢的消失直到銷燬,所以它會走onPause()→ onStop(),再到onDestroy()完全銷燬。
這就是一個activity從它打開,再到它看不見,最後到銷燬的一個完整的流程。
1.2 再說旁邊的分支
①當我們的activity去啓動一個對話框的時候
- 當我們的activiy去啓動一個對話框的時候,對話框會使我們的activity部分不可見,這個時候執行onPause()。
- 當對話框消失後,我們的activity又重新來到前臺完全可見,這個時候會執行onResume(), 然後activity又進入到運行的狀態。
②當我們的activity去啓動另外的一個activity的時候
比如說A activity 去啓動 B activity。
- 當 B activity 還沒有完全蓋住 A activity 的時候,我們的A activity執行的是onPause()動作。
- 當 B activity 完全顯示出來的時候,我們的 A activity 就進入onStop() 的狀態。
- 當 B activity 退出,重新回到 A activity 的時候,我們的 A activity 要重新顯示出來,它會經歷 onRestart(),然後再重新執行 onStart() 和 onResume() ,再走到我們activity的正常運行狀態。
附A啓動B,又從B返回A的生命週期的打印:
2.異常情況下
- 假如我們開啓了新的應用,使得我們當前的app不可見(比如按home鍵),被掛在後臺。
- 假如被掛在後臺的過程中 出現了 內存不足,那我們的app就有可能被我們的系統給kill掉整個進程。
如果我們的app被系統kill之後,我們該如何處理呢?
這個時候我們就可以使用:
-
onSaveInstanceState() 保存數據
-
onRestoreInstanceState()或onCreate()中 恢復數據
積累點滴,做好自己~