Router/ARouter/路由框架原理及实现

路由框架

主流路由框架Router/ARouter/WMRouter等… 本文主要讲解Router和ARouter的实现原理,并实现一个路由框架

1. 路由的作用与优点

1. 在一些复杂的业务场景下,灵活性比较强,很多功能都是动态配置的,比如下发一个活动页面,我们事先并不知道具体的目标页面,但如果事先做了约定,提前做好页面映射,便可以自由配置。
2. 随着业务量的增长,客户端必然随之膨胀,开发人员的工作量越来越大,比如64K问题,比如协作开发问题。App一般都会走向组件化的道路,而组件化的前提就是解耦,那么我们首先要做的就是解耦页面之间的依赖关系。
3. 简化代码,数行跳转代码精简成一行代码
4. 结果回调,每次跳转都会回调跳转结果
5. 编译期处理注解,不影响运行时性能
6. 自定义拦截器,可以对路由进行拦截,比如登录判断和埋点处理
7. 支持多模块使用,支持组件化开发

2. Router与ARouter用到的技术

关键技术有[android-apt][auto-service][javapoet]
android-apt :【注解处理技术】定义注解然后使用定义注解处理器,在注解处理器中操作相应的逻辑
auto-service : 【AutoService】使用apt来定义注解处理器要手动生成Processor配置文件,auto-service能通过该jar包META-INF/services/里的配置文件找到具体的实现类名,并装载实例化,完成模块的注入
javapoet :【代码生成框架】可以根据java的Api生成.java源文件

3. 生成路由表单过程

Router/ARouter/路由框架原理及实现_第1张图片
所以关键点就在注解处理器,在ARouter源码的注解处理器中可以看到ARouter是通过获取所有注解为Router的类
Router/ARouter/路由框架原理及实现_第2张图片
然后将注解为Router的类添加到一个RouteMeta,这个类只是负责存储类型,组合路径等,path通过获取注解值获得
Router/ARouter/路由框架原理及实现_第3张图片
通过routeVerify来讲没有声明group的path中第一个单词取为默认组
Router/ARouter/路由框架原理及实现_第4张图片
然后通过javapoet来生成一个Map>这个map的key是Router的path,value就是注解的类(因为是预编译时生成的类所以不需要考虑性能问题)
yyyyy
上面是声明注解的类,下面是预编译生成的类
Router/ARouter/路由框架原理及实现_第5张图片

4. 动手实现一个路由框架

知道原理那么实现起来就没什么难度了,因为ARouter是采用apt+auto-service+javapoet 的组合实现预编译生成java类,那么我实现就换一种方式
这里介绍一个类扫描神器【Reflections】可以根据指定包下或其他条件高效的扫描我们类下所有的类可以替换掉ARouter实现中的apt+auto-service方式
既然Reflections又高效又好用也能实现效果,那就换一种方式实现

Router/ARouter/路由框架原理及实现_第6张图片
就一个方法实现一个路由框架,不用reflections和apt其实就是用了DexFile的entries方法,来获取DEX文件所包含类名的枚举,类名的类型是一般内部格式(像java/lang/String)

OK一个简易的路由框架就完了~ (σ゚∀゚)σ…:*☆哎哟不错哦

Router/ARouter/路由框架原理及实现_第7张图片

你可能感兴趣的:(Android,框架,原理)