阿里ARouter使用及原理详细介绍
2017-05-26 17:55
429 查看
什么是路由跳转?为什么要用路由跳转?
路由跳转: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:直接外观使用类ARouter2:基本数据载体类PostCard以及他的父类RouteMeta
3:自定义拦截规则接口IInterceptor
4:页面跳转过程中的回调接口NavigationCallback,就像网络请求的回调接口一样,监听网络请求的过程,不过NavigationCallback的各个接口方法都是在子线程调用的,如果想操作UI必须用代码切换到UI线程。
demo:https://github.com/XinRan5312/QXFirstARouter
相关文章推荐
- OpenStack 工作流workflows使用原理详细介绍
- epoll使用方法&简单原理介绍&详细的select/poll/epoll对比
- 详细介绍Android中Parcelable的原理和使用方法
- C++指向类成员的指针的使用(详细介绍)
- 详细介绍在tomcat中配置数据源以及数据源的原理
- 使用Tomcat-5.5.20配置数据库连接池详细介绍
- 详细介绍 Hibernate 泛型 DAO 及其使用方法
- Linux Grep命令使用的详细介绍
- 使用Tomcat-5.5.20配置数据库连接池详细介绍
- Linux下的Grep命令使用方法详细介绍
- 母版页的详细使用介绍
- Ajax原理及使用详细指南
- 详细介绍在tomcat中配置数据源以及数据源的原理
- 详细介绍在tomcat中配置数据源以及数据源的原理
- 使用Tomcat-5.5.20配置数据库连接池详细介绍
- 详细介绍如何使用Connection对象连接数据库
- [转载]PayPal中文指南申请及paypal使用详细介绍
- 使用Tomcat-5.5.20配置数据库连接池详细介绍
- ORM,ASP.NET中ORM学习,ASP.NET中ORM学习心得,WEB2.0中ORM实现原理,Asp.net简单ORM示例源码详细讲解,Asp.net2.0:如何使用ObjectDataSource(配合ORM )(二)
- Shell编程入门:Linux解释器原理详细介绍