1. 程式人生 > >Android - Activity 生命周期

Android - Activity 生命周期

line reat rgb png 能夠 -h 發生 生命周期圖 target

本文主要參考這篇文章和任玉剛的《Android開發藝術探索》一書,謝謝兩位作者!

經典的activity生命周期圖(圖片來源於網絡): 技術分享 7個方法簡單描寫敘述例如以下: 1、onCreateActivity被創建時調用 2、onStart:Activity正在被啟動,已經可見,但還未出如今前臺。還不能和用戶進行交互 3、onResume:Activity已經可見。並出如今前臺,能夠和用戶進行交互了 4、onPause:Activity正在停止。能夠做一些存儲數據、停止動畫等操作,但不能太耗時。由於onPause必須先運行完,新的Activity的
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先運行。而本文中測試結果則顯示onSaveInstanceState後運行。

三、在以上的測試中。僅僅有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 生命周期