SCC(SlotComponentCaller)是一种已铺好基本线路(组件管理),露出基本卡槽(组件接口),底层引流线路已打通,使用者尽管往卡槽插入(注册)到对应槽位,可对槽位进行拦截(interceptor),亦可通过底层阀门接通(AIDL跨进程)进行两个卡槽之间的接通的插槽式组件化框架。基本原理如下图所示:
在相同进程中,组件A可以通过组件管理工具call起组件B,组件B收到调用之后会给回回应result。组件可在使用之前的任何时刻随时插入卡槽(管理器)注册。支持跨进程调用,如进程1中的组件A通过AIDL调用进程2中的组件C,蓝色即为组件A调用组件C的路径,有远程Call,也有远程返回result。这里涉及Binder的AIDL进程间通信,可查看读懂Android框架思想中的Binder机制是基石一文,如Call的作用就是希望进入进程2中call起Component,而不是在进程1call起Component,相同的,返回result的结果也是回到进程1中进行。这里Component组件不仅仅是Activity关联,可以是任意操作。
![18582563-26bb420fde0950ce](https://i-blog.csdnimg.cn/blog_migrate/5794b60929526ae1ebd0f66dc440f690.png)
通过SCC,在重构某某宝的时候,首先会把原始整个工程看成一个Component,叫OriginComponent,然后开启一个Launcher Component,这个Launcher并不做具体的操作,只是call起OriginComponent而已。随后,就可以逐步的成立如LoginComponent,把登录页面从OriginComponent分离出来,并进行全量回归。
实际上,从原始工程中剥离业务成立单独的组件的过程是艰难的,但却是充满期待的,因为就相当于把乱糟糟的一捆线,一根根的抽离出来,到最后完成的时候是可以看到很简洁的工程。
接下来会介绍另一个中间件,该中间件是一个导航中间件,其作用和SCC有部分是一样的,比如当SCC用来启动一个Activity的时候,实际也是找出一个Activity。然而真正的原理也不尽相同。导航中间件是用到了Android的Scheme原理启动Activity,接下来我们将介绍到。