组件化开发之旅2-路由框架手写与跨模块跳转和服务查找

一、为什么要有路由框架?

我们的项目一般是模块化开发,即只有一个Application模块和若干个Library模块组成,那么Library之间如果不相互依赖的话,该怎么去相互通信?
常规的方法:1、AIDL;2.BroadCast;3.EventBus;4.隐试跳转;这些用起来都不优雅,如果用到路由框架,那么我们只要使用注解,将类或者方法暴露出去,那么其他模块想要跳转,直接一行代码可以搞定。这就是路由框架带来的好处。

二、路由框架凭什么能实现通信?

APT为我们生成了两个类,这两个类里面有两张表(Map),一张是分组表:(key是group,value是DNRouter $$ Group)、一张是路由表(key是path路由地址,value是RoutMeta理解为类的信息)


注解处理器示意图

注解处理器生成的类

我们可以联想到BufferKnife框架,它也是通过注解,将每个View绑定,先调用Bufferknife.bind方法,然后就可以省去findViewById的操作,Bufferknife内部也是通过apt注解处理器帮我们自动生成了类文件,执行findViewById的操作也是通过这些类文件操作的,我们只需要传入Activity对象和ViewId,自动的帮我们注入。
阿里提供的ARouter框架,也是基于apt实现,来看下Demo中的第一步DNRouter.init帮我们做了什么事:


init方法示例图

代码中第二步build方法又做了哪些事:


build方法

build内部

代码中第三步navigation方法:


navigation方法

所以很简单的三步,就能实现组件化之间的跨模块跳转!另外服务的启动,Demo中是定义了一个base模块,内部写了一个暴露的接口TestService实现IService,如果哪个模块的Service想要给其他调用,就继承这个接口:


通信实现

三、如何将一个项目改造成组件化,并加入ARouter路由框架:

步骤1:

config.gradle增加albaba的依赖地址:


image.png

步骤2:

在每个模块的build.gradle中添加能支持编译apt指令:


image.png

同时对应模块下的dependencies增加阿里的apt 路由compile依赖:


image.png

步骤3:

在公共的base模块,将所有的路由地址path保存在一个类下面,以便好维护:


image.png

步骤4:

Application的onCreate执行ARouter初始化:


image.png

步骤5:

最后一步:调用ARouter接口,实现跳转或者传参:


image.png

image.png

Demo地址:
仿ARouer手写的路由框架Demo
使用ARouter改造电商项目源码

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容