標籤:
Android資源管理架構實際就是由AssetManager和Resources兩個類來實現的。其中,Resources類可以根據ID來尋找資源,而AssetManager類根據檔案名稱來尋找資源。事實上,如果一個資源ID對應的是一個檔案,那麼Resources類是先根據ID來找到資源檔名稱,然後再將該檔案名稱交給AssetManager類來開啟對應的檔案的,這個過程1所示。
Resources類根據資源ID來查到資源名稱實際上也是要通過AssetManager類來實現的,這是因為資源ID與資源名稱的對應關係是由打包在APK裡面的resources.arsc檔案中的。當Resources類尋找的資源對應的是一個檔案的時候,它就會再次將資源名稱交給AssetManager,以便後者可以開啟對應的檔案,否則的話,上一步找到的資源名稱就是最終的尋找結果。
APK包裡面的resources.arsc檔案是在編譯應用程式資源的時候產生的,然後連同其它被編譯的以及原生的資源一起打包在一個APK包裡面。
資源尋找的過程來看,它們可以歸結為兩大類。第一類資源是不對應有檔案的,而第二類資源是對應有檔案的,例如,
1. 字串資源是直接編譯在resources.arsc檔案中的,
2. 而介面布局資源是在APK包裡面是對應的單獨的檔案的。
如上所述,不對應檔案的資源只需要執行從資源ID到資源名稱的轉換即可,而對應有檔案的資源還需要根據資源名稱來開啟對應的檔案。
我們知道,每一個Activity組件建立的時候,它的成員函數onCreate都會被調用,而在Activity組件的成員函數onCreate中,我們基本上都無一例外地調用setContentView來設定Activity組件的介面。在調用Activity組件的成員函數setContentView的時候,需要指定一個layout類型的資源ID,以便Android資源管理架構可以找到指定的Xml資源檔來填充(inflate)為Activity組件的介面。接下來,我們就從Activity類的成員函數setContentView開始,分析Android資源管理架構尋找layout資源的過程,2所示。
Android App資源的尋找過程分析