Context在我們實際開發中被廣泛用到,比如 startActivity(…)/getResources()/getSharedPreferences(…)/getSystemService(.)等等;書中把Context理解為一個應用情境,一個Activity執行個體就是一個應用情境,一個Service執行個體也是一種應用情境,只是他木有前台介面而已;與Context相關類的繼承關係如下:
- Context只是一個抽象類別,具體的邏輯實現全部都由ContextImpl完成;ContextImpl執行個體的建立幾乎都是在ActivityThread中完成的,比如 handleBindApplication(…)/ createBaseContextForActivity(…)/handleCreateService(…)分別對應載入APK應用、載入Activity、載入Service;
- ContextWrapper只是一個封裝類,同樣木有做任何具體的事情,他只是簡單的將請求轉寄給ContextImpl執行個體完成具體的邏輯執行;
- ContextThemeWrapper內部新增了對主題Theme相關的支援,其主題可以在AndroidManifest.xml中通過android:theme標籤為Application、Activity元素指定;
- Activity對應的前台介面,所以需要使用到主題,而背景Service沒有介面,不需要主題,所以直接繼承ContextWrapper;
- Application對象是在應用程式第一次啟動時最先建立的對象,每個應用有且只有一個Application對象,代表的是一個廣義的應用情境,他也與介面無關,所以也直接繼承ContextWrapper;開發人員可以繼承該類實現更多的商務邏輯,比如加入隨系統啟動時需要載入的資源或服務等;
系統中一共有多少個Context呢?
從上面的描述就可以看出啦,Context個數 = 1個Application + N個Activity + N個Service;
以上內容若有轉載,請註明出處,歡迎訪問老唐的專欄http://blog.csdn.net/sfdev