Android应用模型是基于组件的应用设计模式,Activity、Service等组件不是采用普通的对象创建方式,而是各自有自己的上下文环境Context

Untitled

ContextWrapper包装类,使用装饰器模式 设计模式,构造函数中包含一个Context的引用,调用包装类的方法都会转向其真正的Context对象。

ContextThemeWrapper包含了与主题相关的接口,只有Activity需要用到

ContextImpl实现Context中的所有函数,Activity、Application、Service初始化时都会创建ContextImpl,由ContextImpl实现Context中的方法

Context作用

通过Context访问Android系统的服务和资源,包括

getApplication() 与 getApplicationContext()有什么区别?

返回的是同一个Applicatoin对象,但作用域不同

getApplicatoin()的作用域:Activity、Service,但不能在BroadcastReceiver里使用;

getApplicationContext()的作用域会广一些,如包括BroadcastReceiver等。

getApplicationContext()、getBaseContext()和Activity.this的区别是什么?

getApplicationContext():返回的是Application类型的Context

Activity.this:返回的是当前Activity的Context

getBaseContext():返回构造函数指定的Context / setBaseContext()里传入的Context