android router源码详解,ARouter 源码解析

一、名词解释

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:33fe37a9f856a54fe680c2d6bed11fcc.png

groupsIndex、interceptorsIndex、providersIndex:android router源码详解,ARouter 源码解析_第1张图片

android router源码详解,ARouter 源码解析_第2张图片

四、服务的使用

RouteType 代表了 ARouter 可以跳转的类型:android router源码详解,ARouter 源码解析_第3张图片

其中的 Provider 类似于一个方法,用于提供一种服务。

android router源码详解,ARouter 源码解析_第4张图片

如 PathReplaceService.class 用于处理 path,在 ARouter.getInstance().build(path) 时会调用 forString(path):

android router源码详解,ARouter 源码解析_第5张图片

它需要我们自己实现:

@Route(path = "/modulea/pathReplace", name = "test PathReplaceService")

public class PathReplaceServiceImpl implements PathReplaceService {

...

}

复制代码

b739ec46bb5c46d9c0aa4ce35ba1ea56.png

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[ARouter 源码解析]http://www.zyiz.net/tech/detail-108791.html

你可能感兴趣的:(android,router源码详解)