Activity的生命週期收藏備用,新手必看

Android官方文檔裏對Activity的生命週期有比較詳盡的描述,但因爲資源回收機制帶來不肯定性,咱們的程序運行結果經常與預期的不符,而調試這類問題又十分消耗時間和精力。解決的根本辦法仍是要理解透Activity的生命週期及相關內容,這篇帖子着重介紹Activity生命週期自己,以後會用一兩篇帖子來介紹如何處理異常的狀態變化。html

下圖是官方文檔裏的Activity生命週期圖,其中彩色標出的四個框是Activity的四種狀態,當Activity的狀態改變時會觸發一個或多個onXXX()方法。android

onCreate()

當Acitivity第一次被建立時觸發,通常在這裏要作的事情包括建立視圖(setContentView())、向視圖填充必要的數據等等。app

onRestart()

這個我比較少用到,按文檔上的介紹,若是Activity以前被stop過,那麼下一次onStart()方法以前會先觸發這個方法。spa

onStart()

只要Activity從不可見變成可見,就會觸發到這個方法,但被AlertDialog遮擋/顯示的狀況不算在內。線程

onResume()

當Activity來到最上層的時候,也就是開始與用戶直接交互時,觸發這個方法。例如原本Activity被一個AlertDialog遮擋,當這個AlertDialog消失時,onResume()方法就被觸發。調試

onPause()

和onResume()的觸發條件恰好相反,若是Activity原本在最上層,當它要讓出最上層的位置時會觸發這個方法。onPause()和onResume()是被觸發最頻繁的兩個方法,因此在這裏不該該執行過於消耗資源的方法。htm

onStop()

當有其餘Activity覆蓋了當前Activity時,不論另外一個Activity是新開始的仍是從下層移至最上層的,當前Activity的onStop()方法都會被觸發。生命週期

onDestroy()

Activity生命週期的終點。有兩種狀況會致使它被觸發:1)執行了Activity#finish()方法;2)Android系統因爲資源不足等緣由決定殺掉Activity所在進程。經過isFinishing()方法能夠判斷出是哪一種狀況。在這個方法裏,咱們通常要作的事情是釋放Activity佔有的資源,例如後臺正在進行的下載線程等等。進程

最後,舉個實際例子來講明,假設你有一個「首頁Activity」和一個「編輯頁Activity」。ci

  • 當用戶點擊首頁裏的「開始編輯」按鈕時,首頁的onPause()->onStart()onStop()依次觸發,編輯頁的onCreate()->onStart()->onResume()依次觸發;(感謝James.H.Fu指出的錯誤)

  • 當用戶在編輯頁按下「返回」按鈕時,編輯頁的onPause()->onStop()依次觸發,以後首頁的onStart() -> onResume()依次觸發;

  • 這時用戶在首頁按下「返回」按鈕,首頁的onPause()->onStop()->onDestroy()依次觸發。

參考資料:

Activity Lifecycle
Simplest Android Activity Lifecycle
Activity lifecycle explained in details

相關文章
相關標籤/搜索