阿里ARouter使用及原理详细介绍

xiaoxiao2021-02-28  10

什么是路由跳转?为什么要用路由跳转?

路由跳转:

web开发框架一般支持用户设置路由表,让表内的页面/层级,产生可互相跳转,转发等行为(如果理解不正确请指出)

要用的理由1: 项目大了就无法获取到其他包的Activity.class了

要用的理由2: 逻辑清晰,比较语义化,清楚的知道跳转路径和目的地

要用的理由3: 不单单可以应用于普通Activity还可以与浏览器做一些业务逻辑。(如果有遗漏请指出) ARouter所实现的功能:

支持直接解析URL进行跳转、参数按类型解析,支持Java基本类型(*) 支持应用内的标准页面跳转,API接近Android原生接口 支持多模块工程中使用,允许分别打包,包结构符合Android包规范即可(*) 支持跳转过程中插入自定义拦截逻辑,自定义拦截顺序(*) 支持服务托管,通过ByName,ByType两种方式获取服务实例,方便面向接口开发与跨模块调用解耦(*) 映射关系按组分类、多级管理,按需初始化,减少内存占用提高查询效率(*) 支持用户指定全局降级策略 支持获取单次跳转结果 丰富的API和可定制性 被ARouter管理的页面、拦截器、服务均无需主动注册到ARouter,被动发现 支持Android N推出的Jack编译链

内容来自:https://github.com/alibaba/ARouter/blob/master/README_CN.md 如何使用请见:https://github.com/alibaba/ARouter官方介绍

我们来看一下他是如何实现的

首先先获取ARouter的实例,内部没有什么复杂操作,首先判断有没有初始化,如果初始化了再盼空,如果为空就创建一个ARouter对象,然后将其返回。

获取实例之后,先构建路径build

首先先判空,如果路径没东西就抛异常

不为空之后把时间逻辑交由PathReplaceService接口来处理

PathReplaceService 接口用于处理path相关逻辑,如果要自定义path处理方法可自行二次实现

分发完后调用了另外个build方法

protected Postcard build(String path, String group) { if (StringUtils.isEmpty(path) || StringUtils.isEmpty(group)) { throw new HandlerException(Consts.TAG + “Parameter is invalid!”); } else { PathReplaceService pService = ARouter.getInstance().navigation(PathReplaceService.class); if (null != pService) { path = pService.forString(path); } return new Postcard(path, group); } }

行为几乎一致,但是这里把我们的路径分配到了默认组内并生成新的Postcard对象返回

看到这里有点尴尬,Postcard是什么鬼?

Postcard在com.alibaba.android.arouter.facade目录下是一个包含路线图的容器

里面有一些我们一看就懂的字段

private Uri uri; private Object tag; private Bundle mBundle; private int flags = -1; private int timeout = 300; private IProvider provider; private boolean greenChannal;

很明显他就是整个路由行为的一个载体,可分配url,group,path等等,既然是一个是载体,那我们就不管他干啥,反正就是一个带信息传递用的“快递小哥”

其实最终要的就这几个类:

1:直接外观使用类ARouter 2:基本数据载体类PostCard以及他的父类RouteMeta 3:自定义拦截规则接口IInterceptor 4:页面跳转过程中的回调接口NavigationCallback,就像网络请求的回调接口一样,监听网络请求的过程,不过NavigationCallback的各个接口方法都是在子线程调用的,如果想操作UI必须用代码切换到UI线程。

demo:https://github.com/XinRan5312/QXFirstARouter

转载请注明原文地址: https://www.6miu.com/read-850244.html

最新回复(0)