android context类型,Android Context介绍

0599b060e074

image.png

Context

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

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

那Context到底是什么呢?

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

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

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

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

源码部分截图:

0599b060e074

image.png

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

它描述的是一个应用程序环境(息,即上下文。

该类是一个抽象(abstract class)类,Android提供了该抽象类的具体实现类。

通过它我们可以获取应用程序的资源和类,也包括一些应用级别操作,例如:启动一个Activity,发送广播,接受Intent信息 等。

Context继承关系如下:

0599b060e074

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()方法。

0599b060e074

image.png

public class MyApplication extends Application {

@Override

protected void attachBaseContext(Context base) {

// 在这里调用Context的方法会崩溃

super.attachBaseContext(base);

// 在这里可以正常调用Context的方法

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值