[Android]Activity生命週期之三大循環|五種狀態|七種方法

生命週期三大循環

我們能監控Activity生命週期中的三個嵌套循環(monitor three nested loops in the activity lifecycle)

  • 1.Activity的entire lifetime(全部的生命期)發生在調用onCreate()和調用onDestory()之間。

在onCreate()方法中執行全局狀態的建立(例如定義佈局),在onDestroy()方法中釋放所有保存的資源。

  • 2.Activity的visible lifetime(可見的生命期)發生在調用onStart()和onStop()之間。

在這個期間,用戶能在屏幕上看見Activity,和它進行交互。
系統在Activity的完整壽命中可能多次調用onStart()和onStop(),正如Activity交替地對用戶可見或隱藏。

  • 3.Activity的foreground lifetime (前臺的生命期)發生在調用onResume()和onPause()之間。

在這期間,Activity在屏幕上所有其他Activity的前面,有用戶輸入焦點。
一個Activity能頻繁的在前臺進入和出去之間轉變。

生命週期五種狀態

  1. 啓動狀態:Activity的啓動狀態很短暫,當Activity啓動後便會進入運行狀態。
  2. 運行狀態:Activity在此狀態時處於屏幕最前端,它是可見、有焦點的,可以與用戶進行交互。如單擊、長按等事件。即使出現內存不足的情況,Android也會先銷燬棧底的Activity,來確保當前的Activity正常運行。
  3. 暫停狀態:在某些情況下,Activity對用戶來說仍然可見,但它無法獲取焦點,用戶對它操作沒有沒有響應,此時它處於暫停狀態。
  4. 停止狀態:當Activity完全不可見時,它處於停止狀態,但仍然保留着當前的狀態和成員信息。如系統內存不足,那麼這種狀態下的Activity很容易被銷燬。
  5. 銷燬狀態:當Activity處於銷燬狀態時,將被清理出內存。

生命週期七種方法

  1. onCreate()方法:Activity首次創建時被調用。用於設置Activity的佈局文件,綁定按鈕監聽器等一些普通靜態操作。
  2. onStart()方法:在Activity即將可見時調用。
  3. onResume()方法:在Activity獲取焦點開始與用戶交互時調用。
  4. onPause()方法:在當前Activity被其他Activity覆蓋或鎖屏時調用。一般用於保存當前Activity中的數據。
  5. onStop()方法:在Activity對用戶不可見時調用。
  6. onDestroy()方法:調用Activity的finish()方法或Android系統資源不足時被調用。
  7. onRestart()方法:在Activity從停止狀態再次啓動時調用

onCreate和onStart之間有什麼區別?

  1. 可見與不可見的區別。前者不可見,後者可見。
  2. onCreate方法只在Activity創建時執行一次,而onStart方法在Activity中被多次調用。onCreate能做的事onStart其實都能做,但是onStart能做的事onCreate卻未必適合做。如前文所說的,setContentView和資源初始化在兩者都能做,然而想動畫的初始化在onStart中做比較好。

onStart方法和onResume方法有什麼區別?

  1. 是否在前臺。onStart方法中Activity可見但不在前臺,不可交互,而在onResume中在前臺。
  2. 職責不同,onStart方法中主要還是進行初始化工作,而onResume方法,根據官方的建議,可以做開啓動畫和獨佔設備的操作。

onPause方法和onStop方法有什麼區別?

  1. 是否可見。onPause時Activity可見,onStop時Activity不可見,但Activity對象還在內存中。
  2. 在系統內存不足的時候可能不會執行onStop方法,因此程序狀態的保存、獨佔設備和動畫的關閉、以及一些數據的保存最好在onPause中進行,但要注意不能太耗時。

按鍵對生命週期的影響

BACK鍵

  1. 當我們按BACK鍵時,我們這個應用程序將結束,這時候我們將先後調用onPause()->onStop()->onDestory()三個方法。
  2. 再次啓動App時,會執行onCreate()->onStart()->onResume()

HOME鍵

  1. 按HOME的時候,Activity先後執行了onPause()->onStop()這兩個方法,這時候應用程序並沒有銷燬。
  2. 而當我們從桌面再次啓動應用程序時,則先後分別執行了onRestart()->onStart()->onResume()三個方法。

橫豎屏切換時Activity的生命週期

從豎屏--橫屏:從當前界面依次會走onPuse()--onStop()--onDestory()--onCreate()--onStart()--onResume()。可以看出豎屏會銷燬,橫屏會重新創建。

發佈了448 篇原創文章 · 獲贊 176 · 訪問量 86萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章