安卓开发之对Context的简单理解

Context:
是一个纯abstract类,它有两个具体的实现子类:ContextImpl和ContextWrapper。

ContextWrapper:
这只是一个包装而已,构造函数中必须包含一个真正的Context引用,同时提供了attachBaseContext()用于给ContextWrapper对象中指定真正的Context对象,调用ContextWrapper的方法都会被转向其所包含的真正的Context对象。

ContextThemeWrapper:
其内部包含了与主题(Theme)相关的接口,这里所说的主题就是指在AndroidManifest.xml中通过android:theme为Application元素或者Activity元素指定的主题。当然,只有Activity才需要主题。(Service是不需要主题的,因为Service是没有界面的后台场景,所以Service直接继承于ContextWrapper,Application同理。)

ContextImpl:
真正实现了Context中的所有函数,应用程序中所调用的各种Context类的方法,其实现均来自于该类。

一句话总结:
Context的两个子类分工明确,其中ContextImpl是Context的具体实现类,ContextWrapper是Context的包装类。

提示:
Activity,Application,Service虽都继承自ContextWrapper(Activity继承自ContextWrapper的子类ContextThemeWrapper),但它们初始化的过程中都会创建ContextImpl对象,由ContextImpl实现Context中的方法。

Context的类型:
Activity、Service、Application

Context的数量:
Activity(可多个)+Service(可多个)+Application(只有一个)

Context关系图:
安卓开发之对Context的简单理解