Android - Activity 生命周期
阿新 • • 發佈:2017-08-10
line reat rgb png 能夠 -h 發生 生命周期圖 target
onResume才會運行
5、onStop:相同不能做太耗時的操作
6、onDestory:Activity被銷毀時調用
7、onRestart:Activity正在被又一次啟動,普通情況下。當Activity從不可見又一次變為可見時,onRestart方法就會被調用
下邊是7個方法被調用的詳細場景:
A、第一次進入:
B、按home鍵、鎖屏鍵和跳轉時:
C、當中比較特殊的是,在跳轉到新的activity時,假設新的activity採用了透明主題等。那麽。當前activity不會回調onStop方法:
對上面的log顯示情況做一下簡單總結:
一、onStart和 onResume方法、onPause和onStop方法從描寫敘述上看是幾乎相同的,在普通情況下,沒有明顯的差別,他們總是成對的出現,而且onStop方法總是接著onPause得到運行,但在有些情況下,僅僅會運行onPause而不會運行onStop。比方上邊的C,而這就能夠看出onPause和onStop的某些差別(onStart和onResume同理)。
二、onSaveInstanceState方法的調用時機是在onStop之前。但它和onPause究竟誰先被調用,還未找到根據。
三、在以上的測試中。僅僅有onSaveInstanceState方法被調用了,而onRestoreInstanceState方法卻並沒有被調用。採用《android開發藝術探索》一書中的話來說。系統僅僅會在Activity即將被銷毀而且有機會又一次顯示的情況下才會去調用onRestoreInstanceState方法。如:
D、橫豎屏切換時:
在Activity異常終止的情況下,系統會調用onSaveInstanceState方法來保存當前Activity的狀態,當Activity被又一次創建之後,系統會調用onRestoreInstanceState,而且把Activity銷毀時onSaveInstanceState方法所保存的Bundle對象作為參數同一時候傳遞給onRestoreInstanceState和onCreate方法,在恢復數據時,選擇onRestoreInstanceState和onCreate方法都能夠,但二者是有差別的:onRestoreInstanceState方法一旦被調用,其參數(Bundle
savedInstanceState)一定有值。可是,在正常啟動的情況下,onCreate方法的(Bundle savedInstanceState)參數值為null,所以假設採用onCreate方法進行數據恢復。就必需要先進行推斷,假設savedInstanceState不為null,則說明Activity被重建了。我們就能夠取出之前保存的數據進行恢復。另外,從時間上來看。onRestoreInstanceState方法的調用在onStart之後。官方文檔建議採用onRestoreInstanceState方法來恢復數據。
E、假設不想讓Activity在屏幕旋轉的時候又一次創建,就能夠給configChanges屬性加入orientation這個值:
screenSize這個選項比較特殊,它和編譯選項有關。當編譯選項中的minSdkVersion和targetSdkVersion均低於13時,此選項不會導致Activity重新啟動。否則會導致Activity重新啟動。另外,盡管進行了相關的配置之後,Activity不重新啟動了。可是,系統卻調用了onConfigurationChanged方法,這時候就能夠依照需求進行對應的處理了。
F、指定橫豎屏:
能夠在清單文件裏設置android:screenOrientation="portrait",或是在Java文件裏使用setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);指定為豎屏,
在清單文件裏設置android:screenOrientation="landscape"。或是在Java文件裏使用setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);指定為橫屏。
在這兩種情況下,屏幕方向發生改變時,沒有不論什麽方法被調用。
G、退出Activity:
本文主要參考這篇文章和任玉剛的《Android開發藝術探索》一書,謝謝兩位作者!
經典的activity生命周期圖(圖片來源於網絡): 7個方法簡單描寫敘述例如以下: 1、onCreate:Activity被創建時調用 2、onStart:Activity正在被啟動,已經可見,但還未出如今前臺。還不能和用戶進行交互 3、onResume:Activity已經可見。並出如今前臺,能夠和用戶進行交互了 4、onPause:Activity正在停止。能夠做一些存儲數據、停止動畫等操作,但不能太耗時。由於onPause必須先運行完,新的Activity的
在本文開頭提到的文章中,作者的測試顯示
onSaveInstanceState先運行。而本文中測試結果則顯示onSaveInstanceState後運行。Android - Activity 生命周期