一、概述
Aroute是一款Android平台的路由框架,可以用于构建模块化、可维护、易扩展的Android应用程序。它采用了基于注解的方式进行路由配置,通过在代码中使用注解来完成Activity或者Fragment等组件的映射关系,从而实现在不同模块中跳转的无缝连接。同时,它也提供了一系列的辅助方法来处理参数传递、拦截器、生命周期以及线程切换等问题,为Android应用程序的开发提供了更加便捷、高效、灵活的方式。
当然这个概述是我从其它地方搬过来的,本质上来说这篇文章是想要给和我一样的小白选手一起快速的上手阿里路由的开发,现在大部分公司都是采用着组件化开发的形式,那么在不同组件中的Activity跳转也不能简简单单的一句startActivity就解决啦,俗话说我们要站在巨人的肩膀上来解决问题,话不多说,我们即刻开始上手。
二、准备工作
导入依赖:
准备工作的操作都在需要使用阿里路由的模块下build.gradle文件写入。
dependencies{
api 'com.alibaba:arouter-api:1.5.2'
annotationProcessor 'com.alibaba:arouter-compiler:1.5.2'
}
com.alibaba:arouter-api
提供阿里路由框架中的类和接口:比如接下来会用到的ARouter、@Route注解等。
com.alibaba:arouter-compiler
用来扫描带有@Route注解的地方和生成路由表。
配置模块名:
android{
/*其它配置*/
defaultConfig {
javaCompileOptions {
annotationProcessorOptions {
arguments = [AROUTER_MODULE_NAME :project.getName()]
}
}
}
这段我也没搞懂具体的作用到底在哪里,但是大概明白就是告诉注解处理器使用它的模块名。
三、使用跳转
这里补充说明一下,目前就笔者使用的情况是:有三个模块(app、module_base、module_test)需要实现app到test模块的一个互相跳转,所以第二部分的配置需要在各个模块的build文件中去配置(base模块相当于我的工具库,并且路径表类也放置在base模块中)。
配置注解路径
@Route(path = BaseContent.ROUTER_MAIN)
public class MainActivity {
/*页面的其它代码*/
}
像这样给想要被跳转到的Activity配置好Route注解,这里面path的值可以是字符串,但是笔者为了统一管理就都写在了base模块的一个类中统一管理,要注意的是path值必须要有两个或以上的斜杠划分,如:"/app/main”,至于为什么,我猜可能是因为阿里路由有需要用到的一个group参数的原因吧。
/**
* Extract the default group from path.
*/
private String extractGroup(String path) {
if (TextUtils.isEmpty(path) || !path.startsWith("/")) {
throw new HandlerException(Consts.TAG + "Extract the default group failed, the path must be start with '/' and contain more than 2 '/'!");
}
try {
String defaultGroup = path.substring(1, path.indexOf("/", 1));
if (TextUtils.isEmpty(defaultGroup)) {
throw new HandlerException(Consts.TAG + "Extract the default group failed! There's nothing between 2 '/'!");
} else {
return defaultGroup;
}
} catch (Exception e) {
logger.warning(Consts.TAG, "Failed to extract default group! " + e.getMessage());
return null;
}
}
(_ARouter.java文件中的对path的处理:判断路径的合法性,判断路径是否被两个斜杠包括,提取默认组,多的俺也不清楚了,不知道提取默认组有什么用,有晓得的大佬可以评论一下有什么作用)
进行跳转
如果在要跳转的页面中已经配置好了Route注解了,那么接下来的过程就已经非常简单了。
ARouter.getInstance().build(BaseContent.ROUTER_MAIN).navigation();
在build里面的参数需要改为你想要跳转的目标路径值,比如说你设置的是"/app/main",那么本语句就变成了。
ARouter.getInstance().build("/app/main").navigation();
就可以成功跳转到目标Activity啦,如果跳转失败的话,比如说会出现像弹出来一个toast说找不到目标路径巴拉巴拉的,第一检查是否配置好注解还有路径是否一致,第二检查你的这个模块有没有依赖好跳转模块。
带参跳转
阿里路由的带参跳转也很简单,只需要在build路径后使用with方法就可以携带上参数进行跳转,比如,我目标Activity中需要一个int类型的值,我只需要
ARouter.getInstance().build(BaseContent.ROUTER_MAIN).withInt("intTest",2).navigation();
那么对于目标Activity中如何接收到这个值呢,很简单,通过@AutoWired注解来进行注入到目标字段中,并且在初始化的时候需要在onCreate方法中加入一句:
@Route(path = BaseContent.ROUTER_MAIN)
public class MainActivity{
@Autowired(name = "intTest")
public int intTest;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/*其它代码*/
ARouter.getInstance().inject(this);
}
}
就可以实现带参跳转,并且如果是想要携带一些特别的参数比如说自定义的类,可以让该类序列化后传递。比如
public class User implements Serializable {
/*具体代码*/
}
就可以通过
ARouter.getInstance().build(BaseContent.ROUTER_MAIN).withSerializable("serializableTest",new User()).navigation();
携带跳转,用于满足一些特定的需求,当然,笔者对序列化和反序列化的了解不是很多,只知道有些时候需要携带着特殊的数据跳转过去,如果有别的方法也可以告诉笔者。
四、结语
算是简简单单的把阿里路由的简单使用浅浅的过了一遍,对于使用者来说,该框架最主要的用处就是实现不同模块之间的跳转,至于更深入的设置拦截器,埋点等操作,笔者还没有深入了解,就不说出来丢人了哈哈,真的小菜鸡一枚,写的不好各位见谅。