Aroute使用
Aroute基本使用
你好! 这是Aroute的基本使用
1. 定义
由于公司项目进行了拆分,我司就用上了阿里的这个ARouter框架。对于为啥使用这个框架,我相信很多人知道原因,借用阿里的云栖社区的一段话:我们所使用的原生路由方案一般是通过显式intent和隐式intent两种方式实现的,而在显式intent的情况下,因为会存在直接的类依赖的问题,导致耦合非常严重;而在隐式intent情况下,则会出现规则集中式管理,导致协作变得非常困难。而且一般而言配置规则都是在Manifest中的,这就导致了扩展性较差。除此之外,使用原生的路由方案会出现跳转过程无法控制的问题,因为一旦使用了StartActivity()就无法插手其中任何环节了,只能交给系统管理,这就导致了在跳转失败的情况下无法降级,而是会直接抛出运营级的异常。这时候如果考虑使用自定义的路由组件就可以解决以上的一些问题,比如通过URL索引就可以解决类依赖的问题;通过分布式管理页面配置可以解决隐式intent中集中式管理Path的问题;自己实现整个路由过程也可以拥有良好的扩展性,还可以通过AOP的方式解决跳转过程无法控制的问题,与此同时也能够提供非常灵活的降级方式。那么我就总结一下ARouter的使用方法
2. 特点
由于公司项目进行了拆分,我司就用上了阿里的这个ARouter框架。对于为啥使用这个框架,我相信很多人知道原因,借用阿里的云栖社区的一段话:我们所使用的原生路由方案一般是通过显式intent和隐式intent两种方式实现的,而在显式intent的情况下,因为会存在直接的类依赖的问题,导致耦合非常严重;而在隐式intent情况下,则会出现规则集中式管理,导致协作变得非常困难。而且一般而言配置规则都是在Manifest中的,这就导致了扩展性较差。除此之外,使用原生的路由方案会出现跳转过程无法控制的问题,因为一旦使用了StartActivity()就无法插手其中任何环节了,只能交给系统管理,这就导致了在跳转失败的情况下无法降级,而是会直接抛出运营级的异常。这时候如果考虑使用自定义的路由组件就可以解决以上的一些问题,比如通过URL索引就可以解决类依赖的问题;通过分布式管理页面配置可以解决隐式intent中集中式管理Path的问题;自己实现整个路由过程也可以拥有良好的扩展性,还可以通过AOP的方式解决跳转过程无法控制的问题,与此同时也能够提供非常灵活的降级方式。那么我就总结一下ARouter的使用方法
3.使用
1.配置app下build.gradle文件
defaultConfig {
applicationId "com.example.test"
minSdk 21
targetSdk 32
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
javaCompileOptions {
annotationProcessorOptions {
arguments = [ moduleName : project.getName() ]
}
}
}
添加依赖
implementation 'com.alibaba:arouter-api:1.2.2'
annotationProcessor 'com.alibaba:arouter-compiler:1.1.3'
2.初始化Aroute
新建applicaiton 初始化aroute
public class BaseApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
if (isDebug(getApplicationContext())){
ARouter.openLog();
ARouter.openDebug();
}
ARouter.init(this);
}
public static boolean isDebug(Context context) {
try {
ApplicationInfo info = context.getApplicationInfo();
return (info.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0;
} catch (Exception e) {
return false;
}
}
}
注意在AndroidMainfest.xml配置application
<application
android:name=".base.BaseApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Test">
3.配置跳转基本类
/**
* time 2022/4/1
* sen
* Aroute跳转基本类
*/
public class Rroute {
public static final String MAIN="/main/main";//首页
public static final String ONE="/module/one";//模组首页
public static final String TWO="/test/two";//测试首页
}
4.新建对应activity
对应activity添加path
@Route(path = Rroute.TWO)
@Route(path = Rroute.ONE)
5.实现跳转
ARouter.getInstance().build(Rroute.ONE).navigation();
编译即可,基本的跳转就是这样了
6.传递数据
发送数据,可以选择发送类型
ARouter.getInstance().build(Rroute.TWO)
.withString("name","sen")
.withInt("age",25)
.withParcelable("data",new TestParcelable("sen",16))
.navigation();
目标类
利用Autowired注解
@Autowired
String name;
@Autowired
int age;
@Autowired
TestParcelable data;
利用inject初始化传输的数值
ARouter.getInstance().inject(this);
textView.setText(name+"年龄"+age+"data"+data.getAge());