首先我們來看下源碼中源于Activity的定義:
下面我們來詳細分析每一部分的具體意義:
extends ContextThemeWrapper表示Activity本質上是一個ContextThemeWrapper,而ContextThemeWrapper具體是什麼呢?看ContextThemeWrapper在源碼中的定義:
可見ContextThemeWrapper是一個ContextWrapper,繼續往下看:
ContextWrapper本質上是一個Context,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中定義了哪些接口:
以上是Context衆多接口中的一個片段,看着接口是不是很熟悉?其實我們經常用到的一些函數其實都是在Context中定義的,是以Context可以被認為是用來封裝一下通用功能的一個類,當然這個類不僅僅是針對Activity,最常見的service也是繼承自Context,以及一大堆類都繼承自Context,具體可參考:http://developer.android.com/reference/android/content/Context.html,
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應該能帶來一定的幫助。