1. 程式人生 > >android ---Activity生命週期

android ---Activity生命週期

Activity是應用程式的表現層,一個運用程式可以包含多個Activity,一個Activity包含一個layout,他們之間可以跳轉。


首先介紹一下Activity棧:棧大家應該都瞭解,先進後出,我們已啟動一個運用程式,其實Activity為MainActivity,此時MainActivity入棧,棧裡有隻有MainActivity且為棧頂Activity。如果跳轉到第二介面,棧頂Activity應該變為SecondActivity,而MainActivity應該還在棧裡並沒有出棧


狀態圖


再來聊聊Activity的生命週期:最基本的,建立,執行,銷燬,我們很容易想到

Activity生命週期中常見的有7個onCreate(),onStart(),onResume(),onPause(),onStop(),onDestroy(),onRestart()
簡單介紹一下這幾個:建立,啟動,執行,掛起,停止,銷燬,重啟,

但是一個完整的生命週期是不止這麼點的,但是我們只需要瞭解這7個。

基本狀態
onCreate()->onStart()->onResume()   開始到執行
onCreate()->onStart()->onResume()->onPause()->onStop()->onDestroy()   開始到銷燬

假設:有AActivity(起始Activity),BActivity

開啟程式         A:onCreate()->A:onStart()->A:onResume()

A跳轉B           A:onCreate()->A:onStart()->A:onResume()->A:onPause()->B:onCreate()->B:onStart()->B:onResume()->A:onStop()

B返回A           B:onPause()->A:onRestart()->A:onStart()->A:onResume()->B:onStop()->B:onDestroy()


這裡就有一個疑惑了,為什麼A到B沒有發生onDestroy(),而B到A發生了onDestroy()

之前我們有提到Activity棧,程式開始:此時A入棧,跳轉然後B入棧,A跳轉B的過程中,A並未出棧,而是B入棧,所以A不會被銷燬,但是B返回A的時候,此時B出棧,所以會被銷燬,有由於這個棧所以會調到A

此時Activity棧為A 此時變化狀態為:狀態1:A,狀態2:AB,狀態3:A



這裡注意A是通過某種方式跳轉,而B是返回A,所以會出現不一樣的情況
如果都是通過某種方式跳轉的話都不會發生銷燬,

A跳轉B           A:onCreate()->A:onStart()->A:onResume()->A:onPause()->B:onCreate()->B:onStart()->B:onResume()->A:onStop()

B跳轉A           B:onPause()->A:onRestart()->A:onStart()->A:onResume()->B:onStop()




就是這種情況但是這種Activity棧有點區別 此時的棧狀態為:狀態1:A,狀態2:AB,狀態3:ABA

所可以理解為跳轉是一種入棧,而返回是一種出棧

說一點小細節,當橫屏豎屏切換的時候介面會重新啟動:onPause()->onStop()->onDestroy()->onCreate()->onStart()->onResume()
當時用home鍵的時候:onPause()->onStop()