美文网首页
Android Context介绍

Android Context介绍

作者: Lee_5566 | 来源:发表于2020-11-26 13:36 被阅读0次
image.png

Context

Context 按照英文字面意思就是"上下文",它位于位于framework package的android.content.Context中,其实该类为LONG型,类似于句柄。

很多方法需要通过 Context才能识别调用者的实例。

那Context到底是什么呢?

一个Activity就是一个Context,一个Service也是一个Context。

Android程序员把“场景”抽象为Context类,他们认为用户和操作系统的每一次交互都是一个场景.

比如打电话、发短信,这些都是一个有界面的场景.还有一些没有界面的场景,比如后台运行的服务(Service)。

一个应用程序可以认为是一个工作环境,用户在这个环境中会切换到不同的场景,这就像一个前台秘书,她可能需要接待客人,可能要打印文件,还可能要接听客户电话,而这些就称之为不同的场景,前台秘书可以称之为一个应用程序。

源码部分截图:


image.png

从上面描述可知三点,即:

  1. 它描述的是一个应用程序环境(息,即上下文。
  2. 该类是一个抽象(abstract class)类,Android提供了该抽象类的具体实现类。
  3. 通过它我们可以获取应用程序的资源和类,也包括一些应用级别操作,例如:启动一个Activity,发送广播,接受Intent信息 等。

Context继承关系如下:


image.png

Contex相关类介绍

类名 含义
Context类 抽象类,提供了一组通用的API
ContextIml类 该Context类的实现类为ContextIml,该类实现了Context类的功能。请注意,该函数的大部分功能都是直接调用其属性mPackageInfo去完成。
ContextThemeWrapper类 类内部包含了主题(Theme)相关的接口,即android:theme属性指定的。只有Activity需要主题,Service不需要主题,所以Service直接继承于ContextWrapper类

attachBaseContext函数

ContextWrapper中有一个attachBaseContext()方法,这个方法会将传入的一个Context参数赋值给mBase对象,之后mBase对象就有值了。

Application中在onCreate()方法里去初始化各种全局的变量数据是一种比较推荐的做法,但是如果你想把初始化的时间点提前到极致,也可以去重写attachBaseContext()方法。

image.png

public class MyApplication extends Application {  
 
    @Override  
    protected void attachBaseContext(Context base) {  
        // 在这里调用Context的方法会崩溃  
        super.attachBaseContext(base);  
        // 在这里可以正常调用Context的方法  
    }  
 
} 

相关文章

网友评论

      本文标题:Android Context介绍

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