1. 程式人生 > >Android非正常結束生命週期

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重啟