遇事不决看注释

1
2
3
4
5
6
7
8
9
/**
* Interface to global information about an application environment. This is
* an abstract class whose implementation is provided by
* the Android system. It
* allows access to application-specific resources and classes, as well as
* up-calls for application-level operations such as launching activities,
* broadcasting and receiving intents, etc.
*/
public abstract class Context {

Context 提供了关于应用环境全局信息的接口。(它描述一个应用程序环境的信息(即上下文))

它是一个抽象类,它的执行被 Android 系统所提供。(是一个抽象类,Android提供了该抽象类的具体实现类;)

它允许获取以应用为特征的资源和类型,是一个统领一些资源(应用程序环境变量等)的上下文。(通过它我们可以获取应用程序的资源和类(包括应用级别操作,如启动Activity,发广播,接受Intent等))。

通过查看,可以发现 Context 整体结构如下:

  1. ContextImpl:
    • Application/Activity/Service 通过 attach() 调用父类 ContextWrapperattachBaseContext() ,从而设置父类成员变量 mBaseContextImpl 对象;
    • ContextWrapper 的核心工作都是交给 mBase (即 ContextImpl ) 来完成;
  2. Application: 四大组件属于某一 Application,获取所在 Application
    • Activity/Service : 是通过调用其方法 getApplication() ,可主动获取当前所在 mApplication
      • mApplication 是由 LoadedApk.makeApplication() 过程所初始化的;
    • Receiver: 是通过其方法 onReceive() 的第一个参数指向通当前所在 Application ,也就是只有接收到广播的时候才能拿到当前的 Application 对象;
    • provider: 目前没有提供直接获取当前所在 Application 的方法, 但可通过 getContext() 可以获取当前的 ContextImpl