Android Context对象继承分析

一、组件对Context继承关系

可以看到Activity、Service、Application都是Context的子类;

注意:广播是个普通对象,没有继承Context,只是在onReciever参数中可以获取

总结:

①Context是个抽象类,而Activity、Service、Application等都是该类的一个实现。

②Service和Application继承的是ContextWrapper、Activity继承自ContextThemeWrapper,因此,acitivty在加载布局时回自动选择Manifest配置的主题。而Service和Application无法选择主题

③Application的Context并不一定适合做所有任务

 

二、用法总结

在仔细看一下上图:Activity、Service、Application都是继承自ContextWrapper,而ContextWrapper内部会包含一个base context,由这个base context去实现了绝大多数的方法。

大家注意看到有一些NO上添加了一些数字,其实这些从能力上来说是YES,但是为什么说是NO呢?下面一个一个解释:

数字1:启动Activity在这些类中是可以的,但是需要创建一个新的task。一般情况不推荐。

数字2:在这些类中去layout inflate是合法的,但是会使用系统默认的主题样式,如果你自定义了某些样式可能不会被使用。

数字3:在receiver为null时允许,在4.2或以上的版本中,用于获取黏性广播的当前值。(可以无视)

 

三、getApplicationContext()与getContext()区别

①同一个Activity中,getContext()实际上和Activity.this是同一个对象。

②getApplicationContext()实质是Application对象。

 

转载于:https://my.oschina.net/ososchina/blog/1610173

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值