美文网首页
ARouter笔记

ARouter笔记

作者: 杨华_6f65 | 来源:发表于2019-04-24 15:00 被阅读0次

ARouter是什么?

ARouter是:阿里巴巴自研路由框架,主要解决组件间、模块间的 界面跳转 问题。

ARouter优势

  • 原生的路由方案存在的问题
    首先谈一谈原生的路由方案存在的问题以及为什么需要路由框架。我们所使用的原生路由方案一般是通过显式intent和隐式intent两种方式实现的,而在显式intent的情况下,因为会存在直接的类依赖的问题,导致耦合非常严重;而在隐式intent情况下,则会出现规则集中式管理,导致协作变得非常困难。而且一般而言配置规则都是在Manifest中的,这就导致了扩展性较差。除此之外,使用原生的路由方案会出现跳转过程无法控制的问题,因为一旦使用了StartActivity()就无法插手其中任何环节了,只能交给系统管理,这就导致了在跳转失败的情况下无法降级,而是会直接抛出运营级的异常。
5249989-dae988520998964e.png

这时候如果考虑使用自定义的路由组件就可以解决以上的一些问题,比如通过URL索引就可以解决类依赖的问题;通过分布式管理页面配置可以解决隐式intent中集中式管理Path的问题;自己实现整个路由过程也可以拥有良好的扩展性,还可以通过AOP的方式解决跳转过程无法控制的问题,与此同时也能够提供非常灵活的降级方式。
拦截器就是ARouter中提出的针对AOP思想的实现,AOP是一种面向切片编程思想

ARouter跳转原理

10018045-493c8e3b855f4332.png

从上图流程中,我们可以发现Arouter中原理:
1.通过apt技术利用注解编译时生成类,封装目标界面类的类信息。(APT(Annotation Processing Tool)即注解处理器)
2.在初始化时,把编译生成的类通过key-value的方式存储在arouter中。
3.发送操作者通过key获取到目标界面类的信息。
4.把发送操作者的信息与目标界面类信息进行结合或者关联在一起。
5.实现跳转功能。

组件化的一个数据共享问题:
https://blog.csdn.net/lianwa88/article/details/79973958
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2017/0908/8488.html
主要思路是在Base建立一个Service接口,一个组件去实现接口,一个去调用接口,形成通信。

相关文章

  • [Android] ARouter

    开源最佳实践:Android平台页面路由框架ARouter Alibaba-ARouter 源码分析笔记 ARou...

  • ARouter笔记

    ARouter是什么? ARouter是:阿里巴巴自研路由框架,主要解决组件间、模块间的 界面跳转 问题。 ARo...

  • Arouter源码分析

    Arouter核心请求类图 Arouter 和 _Arouter 的关系 _Arouter主要是处理Arouter...

  • Arouter源码阅读

    自己的阅读笔记 一.从ARouter.init(context);方法开始看, LogisticsCenter.i...

  • Arouter

    ARouter github[https://github.com/alibaba/ARouter]ARouter...

  • ARouter使用总结

    1.ARouter是什么? 2.为什么使用ARouter? 3.如何使用ARouter? 3.使用ARouter的...

  • ARouter原理解析

    基于arouter-api:1.3.1 arouter-compiler:1.1.4ARouter 为And...

  • Arouter初始化过程

    Arouter初始化过程 Arouter初始化入口是Arouter类中的init方法,但Arouter类只是个代理...

  • Arouter源码分析之页面跳转

    ARouter.getInstance() 用双检测模式得到一个ARouter实例。 ARouter # buil...

  • 移动架构05-手写Arouter框架

    移动架构06-手写Arouter框架 ToolRouter是仿照Arouter实现的,目的是学习Arouter框架...

网友评论

      本文标题:ARouter笔记

      本文链接:https://www.haomeiwen.com/subject/tjsggqtx.html