前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ARouter路由记录

ARouter路由记录

原创
作者头像
木子杂志
修改2020-08-06 09:49:19
5170
修改2020-08-06 09:49:19
举报
文章被收录于专栏:木子杂志木子杂志
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 生成类似如下代码

代码语言:txt
复制
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));
  }
}

生成代码的目录:

代码语言:txt
复制
../app/build/generated/source/apt/debug/com/alibaba/android/arouter/routes

然后在 Application 初始化的时候,通过反射创建上述文件的实例对象,然后放入路由表(hashMap)中

实现原理

1.ARouter 在初始化的时候

代码语言:txt
复制
../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 调用

代码语言:txt
复制
ActivityCompat.startActivity()
//或者
ActivityCompat.startActivityForResult()

实现页面跳转

其他

APT 使用

JavaPoet使用

见相关文章

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ARouter
  • 什么是路由
  • key 的表现形式
    • ARouter的路由表
      • 实现原理
        • 其他
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档