Context
1 | public abstract class Context { |
之间的继承关系:
Context 作用
1 | //可以点击studio旁边的 Structure 结构示意图 |
Context
就相当于 Application
的大管家,主要负责:
- 四大组件,启动
Activity
, 广播,服务等 - 获取系统资源
- 文件操作相关
- 数据库操作相关
ContextWrapper
1 | /** |
ContextWrapper
实际上就是 Context
的代理类,所有的操作都是 mBase
完成。另外,Activity, Service 的 getBaseContext 返回的就是这个 mBase.
ContextThemeWrapper
1 | /** |
结合注释及源码,可以发现,相比 ContextWrapper, ContextThemeWrapper 有自己的另外的Resource以及 Theme 成员,并且可以传入配置信息以初始化自己的 Resource 及 Theme.
ContextThemeWrapper 和它的mBase 成员在 Resource 以及 Theme 相关的行为上是不同的。
ContextImpl
ContextImpl
和 ContextThemeWrapper
最大的区别就是没有一个 Configuration
. 其它的行为大致一样。 另外 ContextImpl
可以用于创建 Activity
Service
的 mBase
成员,这个 mBase context
除了参数不同,它们的 Resource
也不同, 需要注意的是, createActivityContext等方法中 setResource 是 mBase 自己调用的, Activity, service 以及 Application 本身并没有执行 setResource.
总结
- ContextWrapper, ContextThemeWrapper 都是 Context 的代理类,二者的区别在于 ContextThemeWrapper 有自己的 Theme 以及 Resource,并且 Resource 可以传入自己配置初始化
- ContextImpl 是 Context 主要实现类, Activity, Service 和 Application 的 Base contex都是由他创建的,即 ContextWrapper 代理的就是 ContextImpl 对象本身