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对象。

人已赞赏
Android文章

Android Webview 性能优化

2019-10-25 13:32:07

Android文章

android 通过修改图片像素实现CircleImageView

2019-10-25 14:23:49

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索