《Android内核剖析》读书笔记 第7章 理解Context
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;
以上内容若有转载,请注明出处,欢迎访问老唐的专栏http://blog.csdn.net/sfdev