Android學習筆記之Context

Android Context 到底是什麼?

什麼是Android Context?

一個Context意味着一個場景,一個場景就是我們和軟件進行交互的一個過程。

那麼從安卓程序的角度來看,Context是什麼?其實一個Activity就是一個Context,一個Service也是一個Context。

一個應用程序可以認爲是一個約會環境,用戶在這個環境中會切換到不同的場景,比如先去有情調的飯店喫飯,再去電影院看個電影,然後再去xxx(此處省略一萬字...)。

Activity類的確是基於Context,而Service類也是基於Context。Activity除了基於Context類外,還實現了一些其他重要的接口,從架構設計的角度看,interface僅僅是某些功能,而extends纔是類的本質,即Activity的本質是一個Context,其所實現的其他接口只是爲了擴充Context的功能而已,擴充後的類稱之爲一個Activity或Service。

一個應用程序中應該有多少個Context對象

我們在應用程序開發中經常會調用Context的一些方法,這些方法看起來似乎會返回一些全局的對象,而不僅僅是某個Activity,可能會有點疑問,一個應用程序到底有多少個Context對象呢?比如,Context.getResources()返回該應用程序所對應的Resource類對象,無論從哪個Activity中調用,都會返回同一個Resource對象。

  • 一個Activity就是一個場景(Context),一個Service也是一個場景,所以,應用程序中有多少個Activity或者Service就會有多少個Context對象,也就是有多少個場景。
  • getResource()等方法返回的是同一個全局對象。

Context 繼承關係是怎麼樣的呢?

 

Context類及其子類的繼承關係

Context類及其子類的繼承關係

 

Context類本身是一個純abstract類。爲了使用方便又定義了Context包裝類-ContextWrapper,穿上了一身裝備顯得也比較強大,ContextWrapper構造函數中必須包含一個真正的Context引用,同時ContextWrapper中有attachBaseContext()用於給ContextWrapper對象中指定真正的Context對象。

ContextThemeWrapper內部包含了與主題相關的接口,這裏的主題就是指在AndroidManifest.xml中通過android:theme爲Application或者Activity指定的主題。

只有Activity才需要主題,Service默默的後臺工作者不需要穿的那麼鮮豔,所以Service直接繼承於ContextWrapper。

ContextImpl類真正實現了Context中所有的函數,真正的八塊腹肌,我們所調用的各種Context類的方法其實實現均來自於該類。

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