ARouter 源码解析

10 篇文章 0 订阅
1 篇文章 0 订阅

一、名词解释

Postcard:明信片,用于发起启动请求
path:指定一个请求的路径:如 /modulea/home
group:path 的分组,为 path 中的第一个节点:如 modulea
RouteMeta:存储基础路由数据(如 Activity 类对象等)
xxxService:接口,用于提供某种功能,继承了 IProvider 接口;如要使用,需自己实现接口
routes:path -> RouteMeta 的 map
providersIndex:path -> xxxService 的 map
Warehouse:仓库,用于存储 routes、providersIndex 等

二、基本流程

ARouter.getInstance().build(path).navigation();

build(path)
    构建一个 Postcard
navigation()
    通过 Postcard 的信息 startActivity

build(path)
    获取 PathReplaceService 处理 path
    通过 path 获取 group
    通过 path、group 创建 Postcard

navigation()
    LogisticsCenter.completion(postcard)
        通过 path 在仓库 routes 中获取 RouteMeta,完善 Postcard
    _navigation()
        使用 Postcard 的信息,startActivity

LogisticsCenter.completion(postcard)
    通过 path 在仓库 routes 中获取 RouteMeta
    如果没有,通过 group 在仓库 groupsIndex 中获取 groupMeta,再将 groupMeta 中的所有 path 信息注入 routes,再次从 routes 中寻找
    如果有,通过  routes 中的 RouteMeta,完善 postcard(如 Activity 类、Extra 信息等)

三、仓库的填充

仓库的 routes 会在 LogisticsCenter.completion() 时填充内容
仓库的 groupsIndex、interceptorsIndex、providersIndex 会在 ARouter.init() 时填充内容

routes:
在这里插入图片描述

groupsIndex、interceptorsIndex、providersIndex:
在这里插入图片描述
在这里插入图片描述

四、服务的使用

RouteType 代表了 ARouter 可以跳转的类型:
在这里插入图片描述
其中的 Provider 类似于一个方法,用于提供一种服务。
在这里插入图片描述
PathReplaceService.class 用于处理 path,在 ARouter.getInstance().build(path) 时会调用 forString(path):

在这里插入图片描述
它需要我们自己实现:

@Route(path = "/modulea/pathReplace", name = "test PathReplaceService")
public class PathReplaceServiceImpl implements PathReplaceService {
    ...
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值