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

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

路由跳转:

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

阿里ARouter使用及原理详细介绍_第1张图片

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

不为空之后把时间逻辑交由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等等,既然是一个是载体,那我们就不管他干啥,反正就是一个带信息传递用的“快递小哥”

阿里ARouter使用及原理详细介绍_第2张图片

阿里ARouter使用及原理详细介绍_第3张图片

阿里ARouter使用及原理详细介绍_第4张图片

阿里ARouter使用及原理详细介绍_第5张图片

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

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

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

你可能感兴趣的:(android开发实例,阿里,ARouter,应用)