Android系統編程入門系列之應用初始化Application

上一篇文章中咱們瞭解到Android系統啓動應用的時候,會首先加載AndroidManifest.xml清單文件中的一系列信息,在清單文件中若是不指定<application></application>標籤中的name屬性值,會默認使用android.app.Application做爲應用程序加載類,其生命週期與應用程序生命週期是一致的。那麼到底應用程序有怎樣的生命週期,在不一樣的生命週期有哪些調用方法可使用?這章將詳細介紹。html

生命週期

應用實例化

首先要知道,一個應用程序,有且僅有一個android.app.Application類與之對應,若是想在清單文件中使用自定義的Application,也必須是繼承自android.app.Application的子類。Application的實例在Android系統啓動應用時優先於應用中其餘任何類而建立。android

應用加載運行環境

因爲Applicaitonandroid.content.ContentWrapper的子類,因此在Application被實例化建立後,Android系統會優先調用該類的attachBaseContext(Context base)方法,從而將上下文環境base參數與該應用程序綁定。app

這裏的 android.content.Context是Android系統對應用程序建立的運行環境,經過該類能夠訪問應用程序的資源文件、發送意圖、接收廣播等應用程序級操做。框架

Android系統中定義ContentWrapper類做爲父類,被須要綁定上下文環境的組件繼承。理論上,任何繼承自ContentWrapper的子類,均可以重載其attachBaseContent(Context base)方法,同時在該方法內保證優先調用其父類方法super.attachBaseContext(base)以確保該組件被正常加載。然而並不推薦重載該方法,若是隻是想獲取上下文環境使用,在組件類內部,只要是在調用attachBaseContent(Contxt base)以後,均可以調用getBaseContext()得到該組件的上下文環境。google

應用建立

Application類與上下文環境綁定後,說明該應用程序已經加載運行環境,Android系統會繼續調用onCreate()方法,代表該應用程序已建立。因此自定義的Application能夠重載該方法,以完成在應用程序建立初期就要執行的操做。通常應用中使用的第三方框架都會在此處初始化,以保證應用建立之時就初始化框架結構。在重載該方法時,必定要優先調用其父類方法super.onCreate()code

其餘應用內操做

以後Android系統再根據清單文件中的組件信息分別加載建立...... 此段暫且不提。xml

應用硬件改變

在應用程序運行過程當中,當Android系統所搭載的硬件設備發生變化時,Android系統會調用該類的onConfigurationChanged(Configuration newConfig)方法。若是重載該方法,能夠響應android.content.res.Configuration類中所涉及到的硬件設備變化,例如常見的橫豎屏切換、應用夜間主題與正常主題切換等,均可以在這裏處理。另外,在重載該方法時,必定要優先調用其父類方法super.onConfigurationChanged(newConfig)htm

應用低內存警告

Android系統運行內存空間使用殆盡,可能致使應用程序沒法正常運行。而此時當前應用程序若是還在前臺運行,Android系統會調用該類的onLowMemory()方法,以後會殺死應用程序中的後臺服務。若是重載該方法,能夠釋放一些不須要的資源,以防止內存空間進一步縮減,將可能保留前臺界面。一樣,在重載該方法時,必定要優先調用其父類方法super.onLowMemory()blog

應用內存殺死

而當Android系統運行內存空間使用殆盡時,應用程序也可能剛好在後臺運行,此時Android系統會調用該類的onTrimMemory(int level)方法,以代表應用程序即將被Android系統殺死。其中的level參數能夠代表當前應用程序所處等級,level等級低的將優先被Android系統徹底殺死。若是重載該方法,則不是釋放資源就能解決的了,能夠執行一些數據持久化保存操做,防止應用程序被殺死後再次啓動後出現數據不一致的狀況。一樣,在重載該方法時,必定要優先調用其父類方法super.onTrimMemory(level)繼承

值得注意的是,應用程序被用戶主動殺死時,在該類中是沒有方法響應的。

經常使用案例

  • 保存應用程序全局變量使用。不推薦該方式,由於當應用程序中含有多個進程時,每一個進程在建立時都會開闢新的內存空間,同時在新內存中建立新的Application實例與之對應,不一樣進程中的全局變量也就不一致了。

  • 初始化第三方框架,具體使用方式可根據第三方框架教程相應調用。

相關文章
相關標籤/搜索