剛接觸android的時候,對於Context類(上下文)特別不理解,從書上看到的對Context的描述大致如下:Context描述了應用程序環境的信息,通過它能獲取應用程序的資源和類,包括一些應用級的操作,如啓動一個activity,或是一個service,發送廣播等等。爲什麼Context的作用如此強大,先看一下跟context有關的類結構關係:
Context
extends ObjectDirect Subclasses(直接子類)
Indirect Subclasses(間接子類)
AbstractInputMethodService, AccessibilityService, AccountAuthenticatorActivity, ActionBarActivity, Activity, ActivityGroup, AliasActivity, Application, BackupAgent,BackupAgentHelper, ContextThemeWrapper, and 23 others.(包括 service)
從上面可以看到,我們熟悉的Activity,service類都屬於context的子類。
Context類作爲一個抽象類,它定義了哪些方法呢?簡單的說,它提供了一組通用的API,我舉幾個常見的例子
如:
public abstract Object getSystemService(String name);//獲取系統級別服務
public abstract Object startActivity(Intetn intent);//啓動一個activity
public abstract ComponentName startService(Intent intent);//啓動一個service
等等,其實這些方法都是定義在Context類中。
那麼這些方法的實現是在哪裏?是在ContextImpl這個類中,它也是Context的直接子類。
現在大家對於前面提到的:Context描述了應用程序環境的信息,通過它能獲取應用程序的資源和類,包括一些應用級的操作,理解一些了呢?
所以其實Context就是一個環境變量(描述了應用程序環境的信息)和句柄(提供各種API)的結合體。
另外補充一點,就是在android 2.0之前的版本是沒有ContextImpl這個類的,之後才採用了這樣的一個設計,順便附上一張自網上看到的圖。
一起學習,有錯誤麻煩指出。