Android Context对象最详细的分析介绍

Context 是一个抽象基类。在翻译为上下文,也可以理解为环境,是提供一些程序的运行环
境基础信息。

Context 下有两个子类,ContextWrapper 是上下文功能的封装类,而ContextImpl
则是上下文功能的实现类。

而ContextWrapper 又有三个直接的子类,ContextThemeWrapper、
Service 和Application。其中,ContextThemeWrapper 是一个带主题的封装类,而它有一个直
接子类就是Activity,所以Activity 和Service 以及Application 的Context 是不一样的,只有
Activity 需要主题,Service 不需要主题。

Context 一共有三种类型,分别是Application、Activity
和Service。这三个类虽然分别各种承担着不同的作用,但它们都属于Context 的一种,而它
们具体Context 的功能则是由ContextImpl 类去实现的,因此在绝大多数场景下,Activity、
Service 和Application 这三种类型的Context 都是可以通用的。

不过有几种场景比较特殊,比如启动Activity,还有弹出Dialog。出于安全原因的考虑,Android 是不允许Activity 或Dialog凭空出现的,一个Activity 的启动必须要建立在另一个Activity 的基础之上,也就是以此形成的返回栈。

而Dialog 则必须在一个Activity 上面弹出(除非是System Alert 类型的Dialog),
因此在这种场景下,我们只能使用Activity 类型的Context,否则将会出错。


getApplicationContext()和getApplication()方法得到的对象都是同一个application 对象,只是
对象的类型不一样。


Context 数量= Activity 数量+ Service 数量+ 1 (1 为Application)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值