Android - Context

作者: 穿越平行宇宙 | 来源:发表于2019-07-07 22:22 被阅读126次

    一个应用有多少个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时

    相关文章

      网友评论

        本文标题:Android - Context

        本文链接:https://www.haomeiwen.com/subject/mdnzvqtx.html