在上一篇文章中我們了解到Android系統啟動應用的時候,會首先加載AndroidManifest.xml清單檔案中的一系列資訊,在清單檔案中如果不指定<application></application>標簽中的name屬性值,會默認使用android.app.Application作為應用程式加載類,其生命周期與應用程式生命周期是一致的,那么到底應用程式有怎樣的生命周期,在不同的生命周期有哪些呼叫方法可以使用?這章將詳細介紹,
生命周期
應用實體化
首先要知道,一個應用程式,有且僅有一個android.app.Application類與之對應,如果想在清單檔案中使用自定義的Application,也必須是繼承自android.app.Application的子類,Application的實體在Android系統啟動應用時優先于應用中其他任何類而創建,
應用加載運行環境
由于Applicaiton是android.content.ContentWrapper的子類,所以在Application被實體化創建后,Android系統會優先呼叫該類的attachBaseContext(Context base)方法,從而將背景關系環境base引數與該應用程式系結,
這里的 android.content.Context是Android系統對應用程式創建的運行環境,通過該類可以訪問應用程式的資源檔案、發送意圖、接收廣播等應用程式級操作,
Android系統中定義ContentWrapper類作為父類,被需要系結背景關系環境的組件繼承,理論上,任何繼承自ContentWrapper的子類,都可以多載其attachBaseContent(Context base)方法,同時在該方法內保證優先呼叫其父類方法super.attachBaseContext(base)以確保該組件被正常加載,然而并不推薦多載該方法,如果只是想獲取背景關系環境使用,在組件類內部,只要是在呼叫attachBaseContent(Contxt base)之后,都可以呼叫getBaseContext()獲得該組件的背景關系環境,
應用創建
當Application類與背景關系環境系結后,說明該應用程式已經加載運行環境,Android系統會繼續呼叫onCreate()方法,表明該應用程式已創建,所以自定義的Application可以多載該方法,以完成在應用程式創建初期就要執行的操作,一般應用中使用的第三方框架都會在此處初始化,以保證應用創建之時就初始化框架結構,在多載該方法時,一定要優先呼叫其父類方法super.onCreate(),
其他應用內操作
之后Android系統再根據清單檔案中的組件資訊分別加載創建...... 此段暫且不提,
應用硬體改變
在應用程式運行程序中,當Android系統所搭載的硬體設備發生變化時,Android系統會呼叫該類的onConfigurationChanged(Configuration newConfig)方法,如果多載該方法,可以回應android.content.res.Configuration類中所涉及到的硬體設備變化,例如常見的橫豎屏切換、應用夜間主題與正常主題切換等,都可以在這里處理,另外,在多載該方法時,一定要優先呼叫其父類方法super.onConfigurationChanged(newConfig),
應用低記憶體警告
Android系統運行記憶體空間使用殆盡,可能導致應用程式無法正常運行,而此時當前應用程式如果還在前臺運行,Android系統會呼叫該類的onLowMemory()方法,之后會殺死應用程式中的后臺服務,如果多載該方法,可以釋放一些不需要的資源,以防止記憶體空間進一步縮減,將可能保留前臺界面,同樣,在多載該方法時,一定要優先呼叫其父類方法super.onLowMemory(),
應用記憶體殺死
而當Android系統運行記憶體空間使用殆盡時,應用程式也可能恰好在后臺運行,此時Android系統會呼叫該類的onTrimMemory(int level)方法,以表明應用程式即將被Android系統殺死,其中的level引數可以表明當前應用程式所處等級,level等級低的將優先被Android系統完全殺死,如果多載該方法,則不是釋放資源就能解決的了,可以執行一些資料持久化保存操作,防止應用程式被殺死后再次啟動后出現資料不一致的情況,同樣,在多載該方法時,一定要優先呼叫其父類方法super.onTrimMemory(level),
值得注意的是,應用程式被用戶主動殺死時,在該類中是沒有方法回應的,
常用案例
-
保存應用程式全域變數使用,不推薦該方式,因為當應用程式中含有多個行程時,每個行程在創建時都會開辟新的記憶體空間,同時在新記憶體中創建新的
Application實體與之對應,不同行程中的全域變數也就不一致了, -
初始化第三方框架,具體使用方式可根據第三方框架教程相應呼叫,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/288480.html
標籤:其他
