一个应用有多少个Context,Context里主要包括什么具体的东西?
- 什么是Context ?
1. 概念
上下文环境、语境
官方文档综述
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.
以上可以翻译成三点:
1)它描述的是一个应用程序环境的信息,即所谓的上下文了
2)该类是一个抽象类(abstract class),Android提供了该类的具体实现类(ContextIml)
3)通过它我们可以获取应用程序的资源和类,也包括一些应用级别的操作,例如启动一个Activity,发送广播,接受intent等。
Context,相信不管是第一天开发Android,还是开发Android的各种老鸟,对于Context的使用一定不陌生~~你在加载资源、启动一个新的Activity、获取系统服务、获取内部文件(夹)路径、创建View操作时等都需要Context的参与,可见Context的常见性。大家可能会问到底什么是Context,Context字面意思上下文,或者叫做场景,也就是用户与操作系统操作的一个过程,比如你打电话,场景包括电话程序对应的界面,以及隐藏在背后的数据;
但是在程序的角度Context又是什么呢?在程序的角度,我们可以有比较权威的答案,Context是个抽象类,我们可以直接通过看其类结构来说明答案:
image.png可以看到Activity、Service、Application都是Context的子类;
也就是说,Android系统的角度来理解:Context是一个场景,代表与操作系统的交互的一种过程。从程序的角度上来理解:Context是个抽象类,而Activity、Service、Application等都是该类的一个实现。
在仔细看一下上图:Activity、Service、Application都是继承自ContextWrapper,而ContextWrapper内部会包含一个base context,由这个base context去实现了绝大多数的方法。
2、我们来看一下context的相关类的继承关系
image.png通过图上我们可以看出:Activity类 、Service类 、Application类本质上都是Context子类,知道为什么老是在这些里面用到context了吧?
3、Application、Activity和Service作为Context的区别
相同点:它们都间接继承了Context。
不同点:首先看它们的继承关系,通过对比可以清晰地发现,Service和Application的类继承关系比较像,而Activity还多了一层继承ContextThemeWrapper,这是因为Activity有主题的概念,而Service是没有界面的服务,Application更是一个抽象的东西,它也是通过Activity类呈现的。Context的真正实现都在ContextImpl中,也就是说Context的大部分方法调用都会转到ContextImpl中,而三者的创建均在ActivityThread中完成,Activity启动的核心过程是在ActivityThread中完成的,这里要说明的是,Application和Service的创建也是在ActivityThread中完成的。
-
一个应用有多少个Context ?
image.png
看一下类结构关系Context有三个子类 Application Activity Service 因此回到最开始的问题
一个应用中的Context实例一般有Application(只有1个)+ Activity(假设10个)+ Service(假设5个)=16
什么时候创建Context实例?
1)创建Application对象时(整个App只有一个Application对象)
2)创建Activity时
3)创建service时
网友评论