Activity所在的棧爲後進先出(Last In First Out)結構。
Activity狀態
-
運行狀態(S1):
-
該Activity處於與User交互的狀態,即是位於棧頂的Activity。
-
系統一般不考慮回收該處內存。
-
-
暫停狀態(S2):
-
Activity不再處於棧頂(Another activity comes in front of the activity),但仍然是可見的。
-
系統只有在內存極低時才考慮回收內存。
-
-
停止狀態(S3):
-
Activity不處於棧頂&完全不可見(The activity is no longer visible)。
-
系統會保存該Activity相應的狀態和變量,但內存被回收的機率增大,即不能保證該Activity沒有被回收。(Process is killed)
-
-
銷燬狀態(S4):
-
Activity從棧中被移除(調用finish()或點擊Back鍵)。
-
重點回收該狀態下的Activity佔用的內存。
-
Activity生存期
-
onCreate()
-
Activity被創建時調用,完成各種初始化操作。
-
-
onStart()
-
Activity由不可見(invisible)變爲可見(invisible)時調用。
-
-
onResume()
-
Activity準備好與User交互時調用,此時activity一定位於棧頂(S1).
-
-
onPause()
-
調用了其他Activity(不再位於棧頂),關鍵數據會被保存,但仍處於可見狀態(visible, S2).
-
-
onStop()
-
Activity變爲不可見(invisible)時調用(S3)。
-
-
onDestroy()
-
Activity被銷燬前調用(S4)。
-
-
onRestart()
-
Activity由停止狀態變爲運行狀態前調用(S3→S1,即不可見→可見)。
-
由於onStop()時Activity的內存可能已經被回收,所以在調用onStart()變爲可見前要調用onRestart()作準備。
-
補充
-
除了onRestart()外,其餘生存期爲一一對應關係
-
onCreate() vs onDestroy()
-
onStart() vs onStop()
-
onResume vs onPause()