棧的特色爲先進後出android
Android使用task來管理Activity。一個task就是一組放在棧裏的Activity的集合。這個棧也叫作返回棧(Back Stack)spa
系統老是會顯示處於棧頂的Activity給用戶.net
2.1 運行狀態:位於棧頂,可見,系統不回收3d
2.2 暫停狀態:不位於棧頂,可見。內存極低時纔回收。blog
打開了一個非全屏或者是透明的Activity。例如,打開了一個對話框形式的Activity。可使當前Activity進入到暫停狀態生命週期
2.3 中止狀態:不位於棧頂,不可見。其餘地方須要內存時會回收內存
2.4 銷燬狀態:從返回棧中移除,系統回收,釋放內存。資源
onCreate():Activity第一次被建立時調用,在此方法中完成初始化的操做get
onStart():Activity由不可見變爲可見時調用it
onResume():Activity準備好與用戶進行交互時調用
onPause():系統準確去啓動或者是恢復另外一個活動時調用
onStop():Activity徹底不可見的時候調用
onDestroy():Activity被銷燬時調用
onRestart():Activity由中止狀態變成運行狀態以前調用
Activity的前臺生存期,主要是在onResume和onPause之間
Activity的可見週期爲:onStart、onResume、onPause、onStop之間
Activity的完整的生命週期爲:onCreate、onStart、onResume、onPause、onStop、onDestroy
A剛啓動時:
A啓動B時:
B位於棧頂時,點擊返回鍵:
在上面的截圖中能夠看出,A啓動B時,會先執行A的onPause方法,因此爲了屏幕過分的天然,給用戶一個比較好的體驗,建議onPause方法中不要執行一些耗時的操做。
在onStop方法調用以前會調用onSaveInstanceState(Bundle outState)方法。將所須要保存的數據存儲到參數bundle中
能夠在onCreate(@Nullable Bundle savedInstanceState)和onRestoreInstanceState(Bundle savedInstanceState)方法裏,從參數Bundle 中獲取已經保存的數據。若是Activity第一次建立時,onCreate方法的參數爲空。可是調用了onRestoreInstanceState方法,那麼參數確定不會爲空。
關於保存和恢復View層次結構,系統工做遵循的是一種委託思想:上層委託下層,父元素委託子元素去進行處理。
當系統配置改變,致使Activity被回收,能夠經過配置android:configChanges屬性,讓Activity不被殺死。可是依然會調用onConfigurationChanged(Configuration newConfig)方法。例如橫豎屏發生改變的時候,爲了防止Activity被回收從新建立,設置:android:configChanges="orientation"