安卓Context-外观设计模式
Posted fesng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓Context-外观设计模式相关的知识,希望对你有一定的参考价值。
外观模式定义
外观模式就是复杂系统对外的简单统一接口。便于把内部的复杂和外部的简单调用隔离。
Activity举例-代理模式
Activity的startActivity()其实是context的子类完成的。Activity本身是context的子类,继承于ContextThemeWraper==》contextWraper==》context。
contextWraper有个对象是mBase就是Conetxt的子类contextImpl的实例。这里是代理的模式,Actoivity的行为,包括打开Activity,Service等都是通过代理mBase来完成的。
mBase是什么时候赋值的?
在启动Activity的流程中,H类型的Handler调用ActivityThread的performLaunchActivity()方法,其中做了很多工作。
1.构建Activity
2.构建Application
3.构建contextImpl
4.Activity的attach()方法,里面会调用父类contextWraper的attachBaseContext(),把上面的contextImpl赋值给mBase。
contextImpl的外观模式
contextImpl是安卓的上下文,你所了解的打开Activity,service,broadcast,加载资源,等等都是通过它来完成的。
contextImpl内部封装了很多的服务和重要类,包括ActivityManager
Service,PMS,WMS等,Resource等, AssetManager等。
举例来说,Activity调用StartActivity其实是调用mBase的startActivity()方法,最终调用调用AMS的execStartActivity()方法。
举例来说,Activity加载资源,也是调用mBase的方法生成Resource,其中Resource内部的AssetManager类具体负责加载资源,AssetManager在C层有对应类,通过系统的配置(config包括屏幕,语言等)和内部的apk路径来加载资源。
contextImpl把很多的类封装起来,暴露方便的接口给我们调用,这就是外观模式。
以上是关于安卓Context-外观设计模式的主要内容,如果未能解决你的问题,请参考以下文章