浅析Context
2016-07-15 18:47
197 查看
Context在我们实际开发中被广泛用到,比如 startActivity(…)/ getResources()/ getSharedPreferences(…)/getSystemService(.)等等;书中把Context理解为一个应用场景,一个Activity实例就是一个应用场景,一个Service实例也是一种应用场景,只是他木有前台界面而已;与Context相关类的继承关系如下:
Context只是一个抽象类,具体的逻辑实现全部都由ContextImpl完成;ContextImpl实例的创建几乎都是在ActivityThread中完成的,比如 handleBindApplication(…)/ createBaseContextForActivity(…)/ handleCreateService(…)分别对应加载APK应用、加载Activity、加载Service;
ContextWrapper只是一个包装类,同样木有做任何具体的事情,他只是简单的将请求转发给ContextImpl实例完成具体的逻辑执行;
ContextThemeWrapper内部新增了对主题Theme相关的支持,其主题可以在AndroidManifest.xml中通过android:theme标签为Application、Activity元素指定;
Activity对应的前台界面,所以需要使用到主题,而后台的Service没有界面,不需要主题,所以直接继承ContextWrapper;
Application对象是在应用程序第一次启动时最先创建的对象,每个应用有且只有一个Application对象,代表的是一个广义的应用场景,他也与界面无关,所以也直接继承ContextWrapper;开发者可以继承该类实现更多的业务逻辑,比如加入随系统启动时需要加载的资源或服务等;
系统中一共有多少个Context呢?
从上面的描述就可以看出啦,Context个数 = 1个Application + N个Activity + N个Service;
Context只是一个抽象类,具体的逻辑实现全部都由ContextImpl完成;ContextImpl实例的创建几乎都是在ActivityThread中完成的,比如 handleBindApplication(…)/ createBaseContextForActivity(…)/ handleCreateService(…)分别对应加载APK应用、加载Activity、加载Service;
ContextWrapper只是一个包装类,同样木有做任何具体的事情,他只是简单的将请求转发给ContextImpl实例完成具体的逻辑执行;
ContextThemeWrapper内部新增了对主题Theme相关的支持,其主题可以在AndroidManifest.xml中通过android:theme标签为Application、Activity元素指定;
Activity对应的前台界面,所以需要使用到主题,而后台的Service没有界面,不需要主题,所以直接继承ContextWrapper;
Application对象是在应用程序第一次启动时最先创建的对象,每个应用有且只有一个Application对象,代表的是一个广义的应用场景,他也与界面无关,所以也直接继承ContextWrapper;开发者可以继承该类实现更多的业务逻辑,比如加入随系统启动时需要加载的资源或服务等;
系统中一共有多少个Context呢?
从上面的描述就可以看出啦,Context个数 = 1个Application + N个Activity + N个Service;
相关文章推荐
- input 选择多个文件上传
- 【慢速学数据结构】散列篇
- NLog的配置和使用(一)
- 零散知识学习
- [输入输出 字符串] cf 697B Barnicle
- Android surfaceview详解
- javax.servlet.Filter
- Activity的创建过程分析
- excel 导出
- 基于Word文档的试卷单题拆分工具
- 在线任意进制转换工具 - aTool在线工具
- 一个简单的生产者与消费者的多线程例子(一):简单的框架
- Spring学习总结(14)——Spring10种常见异常解决方法
- Spring学习总结(14)——Spring10种常见异常解决方法
- ajax 小文件上传
- struts2的自动封装
- 在Xshell中使用sz、rz进行本机和远程主机(或虚拟机)之间文件的传输
- org.eclipse.ui.trim.status显示不完整的问题
- thinkphp 缓存的灵活使用
- 第五章 多个消费者监听同一个队列