接觸Android的Context是很久了,自從開發(fā)Android起就開始使用了尚粘,但是具體的使用择卦,以及Context的來源就不是很清楚,小編最近深度了解了一下Context的使用方式,簡單的介紹一下,簡單通俗易懂的讓你學會怎么詳細的使用Context
(1)秉继、Context的來源史潘明,這個可以去翻下源碼,或者找下博客都有很多秕噪,我介紹下使用的方式。
以上是Context的繼承圖厚宰,Context的繼承結(jié)構(gòu)還是稍微有點復雜的腌巾,可以看到,直系子類有兩個铲觉,一個是ContextWrapper澈蝙,一個是ContextImpl。那么從名字上就可以看出撵幽,ContextWrapper是上下文功能的封裝類灯荧,而ContextImpl則是上下文功能的實現(xiàn)類。而ContextWrapper又有三個直接的子類盐杂,ContextThemeWrapper逗载、Service和Application。其中链烈,ContextThemeWrapper是一個帶主題的封裝類厉斟,而它有一個直接子類就是Activity。
(2)强衡、使用方式擦秽,我們經(jīng)常都是會先自己定義一個MyApplication來使用。使用的時候直接在Activity中使用:
來自mask
Services漩勤,Appaction感挥,Activity都是ConText的實現(xiàn)類,所以都是可以之直接調(diào)用Context:
代碼中第二種方式拿到Context的方式越败,在項目中都可以使用触幼,包括廣播那些沒有繼承Context的實現(xiàn)類。
在使用中也有些細節(jié)要注意眉尸,因為打開Context的源碼中可以看到Context的代碼執(zhí)行順序:
我們是直接調(diào)用onCteate()在里面進行代碼操作域蜗,如果你沒有先實現(xiàn)以上的方法,就直接進行拿到Context的方法會直接報錯:
所以我們使用的時候要小心噪猾,要先調(diào)用onCreate之后再調(diào)用Context里面的方法霉祸。我們很多項目中直接把Applicaion寫成單列模式,但是Andorid并不建議使用袱蜡,那么如果真的想要提供一個獲取MyApplication實例的方法丝蹭,比較標準的寫法又是什么樣的呢?其實這里我們只需謹記一點坪蚁,Application全局只有一個奔穿,它本身就已經(jīng)是單例了镜沽,無需再用單例模式去為它做多重實例保護了,代碼如下所示:
通過學習以上的代碼列子贱田,應(yīng)該都會使用Context了吧缅茉,如果你想再接著深入了解Context的話可以參考一下博客: