Android面試專題系列(三):Activity的生命週期

不詩意的女程序媛不是好廚師~
轉載請註明出處,From李詩雨—https://blog.csdn.net/cjm2484836553/article/details/105136551

這是一個很老很老的問題,但是每次面試又經常遇到。

我們到底該怎樣回答,才比較優雅又全面呢?

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()中 恢復數據

積累點滴,做好自己~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章