一、名词解释
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 {
...
}