Android 插件化开发——基础底层知识(Context家族史,Activity启动流程)

通过上一篇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,
   
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值