面試複習一 Activity生命週期(1)

一、初識Activity

Activity是Android的四大組件之一。是用戶操作的可視化界面;它爲用戶提供了一個完成操作指令的窗口。當我們創建完畢Activity之後,需要調用setContentView()方法來完成界面的顯示;以此來爲用戶提供交互的入口。在Android App 中只要能看見的幾乎都要依託於Activity,所以Activity是在開發中使用最頻繁的一種組件。


二、Activity 的形態

在 android 中,Activity 擁有四種基本狀態:
1. Active/Runing一個新 Activity 啓動入棧後,它在屏幕最前端,處於棧的最頂端,此時它處於可見並可和用戶交互的激活狀態。
2. Paused 當 Activity 被另一個透明或者 Dialog 樣式的 Activity 覆蓋時的狀態。此時它依然與窗口管理器保持連接,系統繼續維護其內部狀態,所以它仍然可見,但它已經失去了焦點故不可與用戶交互。
3. Stoped 當 Activity 被另外一個 Activity 覆蓋、失去焦點並不可見時處於 Stoped狀態。
4. Killed Activity 被系統殺死回收或者沒有被啓動時處於 Killed狀態。

當一個 Activity 實例被創建、銷燬或者啓動另外一個 Activity 時,它在這四種狀態之間進行轉換,這種轉換的發生依賴於用戶程序的動作。下圖說明了 Activity 在不同狀態間轉換的時機和條件:

這裏寫圖片描述

如上所示,Android 程序員可以決定一個 Activity 的“生”,但不能決定它的“死”,也就時說程序員可以啓動一個 Activity,但是卻不能手動的“結束”一個 Activity。當你調用 Activity.finish()方法時,結果和用戶按下 BACK 鍵一樣:告訴 Activity Manager 該 Activity 實例完成了相應的工作,可以被“回收”。隨後 Activity Manager 激活處於棧第二層的 Activity 並重新入棧,同時原 Activity 被壓入到棧的第二層,從 Active 狀態轉到 Paused 狀態。例如:從 Activity1 中啓動了 Activity2,則當前處於棧頂端的是 Activity2,第二層是 Activity1,當我們調用 Activity2.finish()方法時,Activity Manager 重新激活 Activity1 併入棧,Activity2 從 Active 狀態轉換 Stoped 狀態,Activity1. onActivityResult(int requestCode, int resultCode, Intent data)方法被執行,Activity2 返回的數據通過 data參數返回給 Activity1。

三、Activity 生命週期一覽

google官方獲取

protected void onCreate(Bundle savedInstanceState); 
protected void onRestart(); 
protected void onStart(); 
protected void onResume(); 
protected void onPause(); 
protected void onStop(); 
protected void onDestory(); 

五、Activity生命週期認識

  • onCreate() :Activity創建的時候調用的,它是生命週期第一個調用的方法;我們在創建Activity時一般都需要重寫該方法,然後可以setContentView() 設置佈局,初始化控件等等。
  • onRestart():表示Activity正在重新啓動,當Activity由不可見變爲可見狀態時,該方法被回調。這種情況一般是用戶打開了一個新的Activity時,當前的Activity就會被暫停(onPause和onStop被執行了),接着又回到當前Activity頁面時,onRestart方法就會被回調。
  • onStart():Activity回調該方法時,此時Activity已處於可見狀態,只是還不可以與用戶進行交互。可以簡單理解爲Activity已顯示而我們無法看見擺了
  • onResume():當此方法回調時,則說明Activity已在前臺可見,可與用戶交互了(處於前面所說的Active/Running形態),onResume方法與onStart的相同點是兩者都表示Activity可見,只不過onStart回調時Activity還是後臺無法與用戶交互,而onResume則已顯示在前臺,可與用戶交互。當然從流程圖,我們也可以看出當Activity停止後(onPause方法和onStop方法被調用),重新回到前臺時也會調用onResume方法,因此我們也可以在onResume方法中初始化一些資源,比如重新初始化在onPause或者onStop方法中釋放的資源。
  • onPause():此方法被回調時則表示Activity正在停止(Paused形態)
  • onStop() : 一般在onPause方法執行完成直接執行,表示Activity即將停止或者完全被覆蓋(Stopped形態),此時Activity不可見,僅在後臺運行。同樣地,在onStop方法可以做一些資源釋放的操作(不能太耗時)。
  • onDestory():這是Activity生命週期最後調用的方法,說明此Activity正在銷燬,一般我們可以在此方法中做一些回收工作和最終的資源釋放。

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