參考: 《第一行代碼:Android》 郭霖(著)ip
Activity所在的棧爲後進先出(Last In First Out)結構。內存
Activity狀態get
運行狀態(S1):it
該Activity處於與User交互的狀態,便是位於棧頂的Activity。io
系統通常不考慮回收該處內存。ast
暫停狀態(S2):變量
Activity再也不處於棧頂(Another activity comes in front of the activity),但仍然是可見的。im
系統只有在內存極低時才考慮回收內存。數據
中止狀態(S3):activity
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()