Android非正常結束時的生命週期

正常的Activity的生命週期中,當在一個oldActivity中啓動一個新的newActivity時,先調用oldActivity的onPause方法,然後調用newActivity的onCreate-->onStart-->onResume,執行這三個方法之後,纔開始執行oldActivity的onStop方法,所以在oldActivity的onPause方法中,不能進行耗時操作

1.第一種情況,資源相關的系統配置發生改變導致Activity被殺死並重新創建

Activity-->意外情況-->onSaveInstanceState-->onPause-->onStop-->onDestroy

重新啓動時調用-->onCreate-->onStart-->onRestoreInstanceState,這兩個方法中的savedInstanceState參數即保留這上次意外停止時的信息,

 

2.第二種情況,系統內存不足導致低優先級的Activity被殺死

低優先級的Activity會在內存不足時被殺死

優先級高:正在前臺且可見的Activity

優先級中:不在前臺,但是可見的Activity(如在Activity中彈出彈窗)

優先級低:不在前臺不可見

 

需要注意的是onSaveInstanceState只有在非正常退出纔會執行,且執行後再重啓onRestoreInstanceState的參數一定有值,而onCreate的參數在首次啓動時是沒有值的,所以如果在onCreate中恢復數據時需要判空,官方建議在onRestoreInstanceState方法中恢復數據

 

 

第一種情況下,如果不想銷燬Activity重新創建,則需要制定configChanges屬性.常用的有:

locale:設備本地位置發生了改變,一般指切換了系統語言

orientation:屏幕方向發生了改變

keyboardHidden:鍵盤的可訪問性放生了改變,比如用戶調出了鍵盤

screenSize:屏幕尺寸發生了改變,當旋轉屏幕時,屏幕尺寸也會發生改變,當編譯選項中的minSdkVersion和tarSdkVersion都低於13時,此選項不會導致Activity重啓,否則會導致Activity重啓

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章