Context上下文理解及获得上下文的几种方式

Context理解

Context提供了一个应用的运行环境,在Context的大环境里,应用

才以访问资源,才能完成和其他组件、服务的交互,Context定义了

一套基本的功能接口,我们可以理解为一套规范,Activity Service

是实现这套规范的子类,这么说也许并不准确,因为这套规范实际是

被ContextImpl类统一实现的,Activity和Service只是继承并有选

择性地重写了某些规范的实现

Context相关类的继承关系

Context ---> ContextImx

        ---> ContextWrpper ---> ContextThemeWrpper ---> Acitivity

                           ---> Service

                           ---> Application

通过图上我们可以看出:Activity类 、Service类 、Application类本质上都是Context子类,

知道为什么老是在这些里面用到context

Application、Activity和Service作为Context的区别

1.相同点:

它们都间接继承了Context

2.不同点

首先看它们的继承关系,通过对比可以清晰地发现,Service和Application的类继承关系比较像,

而Activity还多了一层继承ContextThemeWrapper,这是因为Activity有主题的概念,而Service是没有界面的服务 
`   
,Application更是一个抽象的东西,它也是通过Activity类呈现的。Context的真正实现都在ContextImpl中,

也就是说Context的大部分方法调用都会转到ContextImpl中,而三者的创建均在ActivityThread中完成,Activity

启动的核心过程是在ActivityThread中完成的,这里要说明的是,Application和Service的创建也是在ActivityThread中完成的。

一个应用程序中有多少个context

答案显而易见:总Context实例个数 = Service个数 + Activity个数 + 1(Application对应的Context实例)

获的context几种方式

1.this 当前类上下文


2.HomeActivity.this 外部类的上下文


3.getApplication().this  这个是指应用的上下文


4.getContext()  这个一般用在调式或者没有上下文的类中

你可能感兴趣的:(Android)