通过上一篇Binder以及AIDL的学习,博客最后写了实际上Activity与底层通信模式可以看成是AIDL。
不了解Binder以及AIDL的,移步:
Android 插件化开发——基础底层知识(Binder,AIDL)
这篇博客接着为插件化开发作准备,讲述一下Context家族史以及Activity启动流程
Context家族史
关于Context,相信并不陌生,但是估计很多初学者都不知道 Context其实是个抽象类
public abstract class Context
具体的代理类是:ContextWrapper
public class ContextWrapper extends Context
而ContextWrapper里面又是个空壳子,具体的实现类是:ContextImp
class ContextImpl extends Context
这是个典型的代理模式,关于代理模式,什么事代理模式?
栗子:在 ContextWrapper中,方法都是通过mBase调用的,比如:
mBase.getTheme();
但是,getTheme方法内并没有任何具体实现,可以看到有个attachBaseContext方法,该方法就是替换mBase的,而attachBaseContext在Activity.java的attach方法中调用,
继续查找,可在ActivityThread中看到:
private Activity performLaunchActivity(ActivityClientRecord r, Intent customIntent) {
.....
ContextImpl appContext = createBaseContextForActivity(r);
....
activity.attach(appContext, this, getInstrumentation(), r.token,