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() 这个一般用在调式或者没有上下文的类中