天天看點

從源碼中Activity 的定義來了解 Activity(ContextWrapper、Context、Activity、ContextThemeWrapper)

首先我們來看下源碼中源于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應該能帶來一定的幫助。

上一篇: QT 資源檔案
下一篇: Activity用法

繼續閱讀