ContextWrapper、Context、Activity、ContextThemeWrapper
首先我們來看下原始碼中源於Activity的定義:
- publicclass Activity extends ContextThemeWrapper
- implements LayoutInflater.Factory2,
- Window.Callback, KeyEvent.Callback,
- OnCreateContextMenuListener, ComponentCallbacks2 {
- ...
- }
extends ContextThemeWrapper表示Activity本質上是一個ContextThemeWrapper,而ContextThemeWrapper具體是什麼呢?看ContextThemeWrapper在原始碼中的定義:
- publicclass ContextThemeWrapper extends ContextWrapper {
- ...
- }
可見ContextThemeWrapper是一個ContextWrapper,繼續往下看:
- publicclass ContextWrapper extends Context {
- Context mBase;
- ...
- }
ContextWrapper本質上是一個Context,context 的定義如下:
- publicabstractclass Context {
-
...
- }
Context是一個抽象類,因此可以知道Activity其實就是一個Context,並實現了一些介面,如何理解Context呢?
Context 俗稱上下文,在很多物件定義中我們都用到了Context,例如ImageViewimageView = new ImageView(this); 這裡的this就是當前Activity所在的Context,原始碼中對Context的解釋如下:
Interface to global information about anapplication environment. This is an abstract class whose implementation isprovided by the Android system. It allows access to application-specificresources and classes, as well as up-calls for application-level operationssuch as launching activities, broadcasting and receiving intents, etc.
Context只是一個介面,真正實現Context功能的是ContexImpl類,為了瞭解Context具體有什麼作用,我們先來了解下Context中定義了哪些介面:
- publicabstract ComponentNamestartService(Intent service);
- publicabstractboolean stopService(Intentservice);
- publicabstractvoid startActivity(Intentintent);
- publicabstractvoid sendBroadcast(Intentintent);
- publicabstract Intent registerReceiver(BroadcastReceiverreceiver, IntentFilter filter);
- publicabstract Resources getResources();
ContextWrapper僅僅是對Context的簡單封裝,如果要對Context修改,我們只需要修改ContextWrapper,而不需要對通用的Context進行修改,ContextWrapper的目的僅此而已。而ContextThemeWrapper只是在ContextWrapper的基礎上加入了Theme相關的一些內容,對於Activity來說需要處理一些Theme相關的東西,但是對於Service來說只需繼承ContextWrapper,因為Service不需要處理Theme相關的內容。
分析完extends部分,我們再來看下implements部分,extends決定了Activity的本質,implements部分可以認為是對Activity的擴充套件。
- LayoutInflater.Factory:通過LayoutInflater來inflate一個layout時的回撥介面
- Window.Callback: Activity 靠這個接口才有機會對訊息進行處理,這部分涉及到訊息的傳遞,以後將專門介紹。
- ComponentCallbacks2:定義了記憶體管理的介面,記憶體過低時的回撥和處理處理介面
- KeyEvent.Callback:鍵盤事件響應的回撥介面,例如onKeyDown()等
- OnCreateContextMenuListener:上下文選單顯示事件的監聽介面,通過實現該方法來處理上下文選單顯示時的一些操作
通過以上分析,我們大概瞭解了Activity具體是什麼了,這對以後理解Activity應該能帶來一定的幫助。