Activity在異常情況下的生命週期——Android開發藝術探索筆記

原文鏈接http://sparkyuan.me轉載請註明出處

Activity在異常情況下的生命週期

關於Activity正常情況下的生命週期請參考這篇文章http://blog.csdn.net/l664675249/article/details/48895903,本文主要講解Activity在異常情況下的生命週期。

情況1:資源相關的系統配置發生改變

資源相關的系統配置發生改變,舉個栗子。當前Activity處於豎屏狀態的時候突然轉成橫屏,系統配置發生了改變,Activity就會銷燬並且重建,其onPause, onStop, onDestory均會被調用。因爲實在異常情況下終止的,所以系統會調用onSaveInstanceState來保存當前Activity狀態。這個方法是在onStop之前,與onPause沒有固定的時序關係。當Activity重建的時候系統會把onSaveInstanceState所保存的Bundle作爲對象傳遞給onRestoreInstanceState和onCreate方法。

注:

  • View的源碼中每個View都有onSaveInstanceState和onRestoreInstanceState這兩個方法。
  • 接收位置可以是onRestoreInstanceState和onCreate方法,區別是:onRestoreInstanceState如果被調用,參數Bundle一定是有值的,在onCreate中需要判斷參數是否爲null。
  • onSaveInstanceState只有在Activity即將銷燬並有機會重新顯示時纔會調用,正常銷燬的Activity生命週期中不會調用,比如:旋轉屏幕,按Home鍵,啓動新Activity等。

情況2:資源內存不足導致低優先級Activity被殺死

Activity優先級

  1. 前臺Activity——正在和用戶交互的Activity,優先級最高
  2. 可見但非前臺Activity——Activity中彈出的對話框導致Activity可見但無法交互
  3. 後臺Activity——已經被暫停的Activity,優先級最低

系統內存不足是,會按照以上順序殺死Activity,並通過onSaveInstanceState和onRestoreInstanceState這兩個方法來存儲和恢復數據。

不讓Activity重新創建的方法

系統配置有很多內容,當某項改變時,我們不想讓Activity重新創建可以在AndroidMainfest中給Activity指定configChanges屬性。比如

 android:configChanges="orientation"

configChanges屬性非常多,具體可參考官方文檔
常用的有locale, orientation和keyboardHidden這三個。

原文鏈接http://sparkyuan.me轉載請註明出處

發佈了58 篇原創文章 · 獲贊 26 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章