Context分析

Context继承关系

context.png

Context的作用

  • 四大组件的交互,包括启动 Activity、Broadcast、Service,获取 ContentResolver 等
  • 获取系统/应用资源,包括 AssetManager、PackageManager、Resources、System Service 以及 color、string、drawable 等
  • 文件,包括获取缓存文件夹、删除文件、SharedPreference 相关等
  • 数据库(SQLite)相关,包括打开数据库、删除数据库、获取数据库路径等
  • 其它辅助功能,比如设置 ComponentCallbacks,即监听配置信息改变、内存不足等事件的发生

为什么Activity需要继承自ContextThemeWrapper,而Service和Application直接继承自ContextWrapper呢?

ContextThemeWrapper类,从它的命名就可以看出,其内部包含了与Theme相关的接口,当然,只有Activity才需要主题,Service和Application是不需要主题的,因为Service是没有界面的后台场景,所以Service和Application直接继承于ContextWrapper

Activity的this和getBaseContext()有什么区别?

Activity就是继承Context的,所以this是返回Activity自己;
getBaseContext()返回的是ContextWrapper里面的mBase(不包含Theme相关的功能);

代理关系

我们很多人往往把Activity理解成它继承了Context,是的没错,它确实继承自Context,但我认为,把Activity理解成它代理了Context,会更贴合实际意义一些.

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。