安卓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把很多的类封装起来,暴露方便的接口给我们调用,这就是外观模式。

发布了586 篇原创文章 · 获赞 1037 · 访问量 186万+

猜你喜欢

转载自blog.csdn.net/u010321471/article/details/94361741