Android Context原理总结
context相关类的类关系
Activity类中Context的创建
Service类中Context的创建
Application中的context的创建
创建流程总结
- 相同流程
- 在Instrumentation类中通过反射创建Application/Activity/Service
- 创建ContextImpl
- Application/Activity/Service.attach将ContextWrapper中的Context和ContextImpl关联
- ContextImpl.setOuterContext
不同点
在不同情况下创建ContextImpl传递的参数不同
- Activity创建:ContextImpl.createActivityContext
- Service/Application创建:ContextImpl.createAppContext
ContextImpl.setOuterContext关联的类不同
Activity.getApplicationContext
涉及到的设计模式
- 在Service和Application类中,ContextWrapper相当于ContextImpl的代理类,因为ContextWrapper并没有增强ContextImpl的功能
- 在Activity类中,ContextThemeWrapper相当于ContextImpl的包装类,在ContextImpl的基础上扩展了与theme相关的功能,可以通过ContextThemeWrapper修改theme
参考博客
Android深入理解Context(一)Context关联类和Application Context创建过程
Android深入理解Context(二)Activity和Service的Context创建过程