官方中文介绍:https://github.com/alibaba/ARouter/blob/master/README_CN.md
一、基本使用
1、添加依赖
android {
defaultConfig {
javaCompileOptions {
annotationProcessorOptions {
//注解处理器需要的模块名,作为路径映射的前缀
arguments = [AROUTER_MODULE_NAME: project.getName()]
}
}
}
}
dependencies {
implementation 'com.alibaba:arouter-api:1.4.1'
annotationProcessor 'com.alibaba:arouter-compiler:1.2.2' //注解处理器,会将注解编译成Java类
}
2、添加注解
路劲至少两级,即xx/xx,前一个xx用于分组
@Route(path = "/test/second")
public class SecondActivity extends AppCompatActivity {
}
3、初始化SDK
一般在Application中初始化
ARouter.init(this);
4、使用
很简单,一句话完成,可携带参数
ARouter.getInstance().build("/test/second").navigation();
二、原理
1、通过APT解析注解 、Javapoat生成java文件,下面为最重要2个文件
ARouter$$Root$$Module_Name(build文件 配置)
public void loadInto(Map<String, Class<? extends IRouteGroup>> routes) {
routes.put(“xx”, ARouter$$Group$$Module_Name.class);//添加Module路由
}
ARouter$$Group$$Module_Name
public void loadInto(Map<String, RouteMeta> atlas) {
atlas.put(“/XX/XX”, RouteMeta.build(RouteType.ACTIVITY, XX.class, “/XX/XX”, "test", (Map)null, -1, -2147483648));//添加当前Module各子路由信息
}
2、初始化SDK -> ARouter.init(this);
根据包名获取所有类名称,对类型进行校验 (第一步名称规则约定) ,如通过反射生成对象,然后调用LoadInfo()全部加入内存Map中(loadinfo为抽象方法) ,生成单例对象,创建Handler等。
3、使用Arouter -> ARouter.getInstance().build("/test/second").navigation();
ARouter.getInstance() -> 得到单例
ARouter.getInstance().build("/test/second") -> 得到Postcard (封装了跳转信息 对标Intent)
ARouter.getInstance().build("/test/second").navigation() -> 主线程handler发送一个Runnable,根据postcard信息 转换成intent ,最后调用startActivity跳转。
ARouter支持4大组件、Frament 。(见源码ARouter -> _navigation方法)
参考:
简单分析 https://www.jianshu.com/p/48d40542d958
深入分析 https://www.jianshu.com/p/857aea5b54a8