ARouter路由记录
时间:2022-07-22
本文章向大家介绍ARouter路由记录,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
ARouter
网上关于 ARouter 源码解析的文章已经不少了,这里简单总结一下自己的理解,方便以后查看和复习
什么是路由
说起路由,总离不开路由表,在 android 常说的路由表,就是一个hashMap,其中:
key : activity 的path路径,就是一个标签,用来对应 activity
value : 标签对应的 activity
这样使用路由库进行页面跳转的时候,只需要将key 作为参数传入,路由内部将 key 对应的 activity 信息封装成 intent,就实现跳转了.
key 的表现形式
- 在清单文件给每个 activity 加一个 label 打上标记作为 key
- 使用注解在每个 activity 上打上标记 ARouter使用的注解
ARouter的路由表
ARouter 使用 APT 工具在代码编译期间,对打上标记的 activity 进行解析
使用 JavaPoet 生成类似如下代码
public class ARouter$$Group$$jet implements IRouteGroup {
@Override
public void loadInto(Map<String, RouteMeta> atlas) {
atlas.put("/jet/detail_activity", RouteMeta.build(RouteType.ACTIVITY, DetailActivity.class, "/jet/detail_activity", "jet", null, -1, -2147483648));
atlas.put("/jet/player_activity", RouteMeta.build(RouteType.ACTIVITY, PlayerActivity.class, "/jet/player_activity", "jet", null, -1, -2147483648));
}
}
生成代码的目录:
../app/build/generated/source/apt/debug/com/alibaba/android/arouter/routes
然后在 Application 初始化的时候,通过反射创建上述文件的实例对象,然后放入路由表(hashMap)中
实现原理
1.ARouter 在初始化的时候
../arouter-api-1.5.0.aar/../jars/classes.jar!/com/alibaba/android/arouter/routes
../app/build/generated/source/apt/debug/com/alibaba/android/arouter/routes
遍历上述路径下的文件,通过反射创建上述文件的实例对象,分别放入对应的路由表
2.跳转的时候解析Postcard对象的跳转信息,封装为 intent 调用
ActivityCompat.startActivity()
//或者
ActivityCompat.startActivityForResult()
实现页面跳转
其他
APT 使用
JavaPoet使用
见相关文章
- Enterprise Library深入解析与灵活应用(2): 通过SqlDependency实现Cache和Database的同步
- 让你感觉不真实的13个伟大科学成就和发现
- 分析Silverlight跨域调用
- Spring集成RabbiMQ-Spring AMQP新特性
- Nodejs学习笔记(二)--- 事件模块
- 巧用FireFox来调试Silverlight
- Nodejs学习笔记(一)--- 简介及安装Node.js开发环境
- WCF后续之旅(7):通过WCF Extension实现和Enterprise Library Unity Container的集成
- 区块链技术(一):Truffle开发入门
- Nodejs学习笔记(一)——初识Nodejs
- RabbitMQ入门-Topic模式
- 单分子数据储存取得一大突破,一枚“硬币”存量相当于100部iPhone 7
- Windows 7 旗舰版 VHD安装体验
- Nodejs学习笔记(二)——Eclipse中运行调试Nodejs
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法