一、AndroidRouter简介
AndroidRouter是一个轻量级的Android组件化框架。 它主要用于应用的模块化和解耦,并且可以方便地在应用程序中使用这些模块。同时,使用这个框架可以轻松地实现各模块间的通讯、数据传递和事件分发等功能。
二、AndroidRouter的基本用法
1、导入依赖
在项目的build.gradle文件中添加以下依赖项:
dependencies { implementation 'com.alibaba:arouter-api:1.5.1' annotationProcessor 'com.alibaba:arouter-compiler:1.2.4' }
2、初始化
在应用程序的Application中初始化ARouter:
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); ARouter.init(this); } }
3、定义路由
通过在每个组件子模块中注册路由,来实现代码的模块化。
//在模块A中注册路由 @Route(path = "/moduleA/activity") public class ModuleAActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_module_a); } } //在模块B中注册路由 @Route(path = "/moduleB/activity") public class ModuleBActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_module_b); } }
4、跳转到目标Activity
在需要跳转到目标Activity的地方,使用ARouter API通过路由路径构建跳转Intent,然后启动该Intent。
ARouter.getInstance().build("/moduleA/activity").navigation(); ARouter.getInstance().build("/moduleB/activity").navigation();
5、携带参数跳转
在构建Intent的时候,可以使用withXxx()方法来携带参数
//跳转到ModuleAActivity并携带参数 ARouter.getInstance().build("/moduleA/activity") .withString("param1", "value1") .withInt("param2", 123) .navigation();
三、其他功能
1、拦截器
拦截器可以用于在路由的前后进行拦截处理,比如在路由跳转之前检查用户是否已经登录。
//定义登录拦截器 @Interceptor(priority = 8, name = "login") public class LoginInterceptor implements IInterceptor { @Override public void process(Postcard postcard, InterceptorCallback callback) { if (TextUtils.equals("user", postcard.getPath())) { if (LoginUtil.isLogin()) { callback.onContinue(postcard); } else { callback.onInterrupt(new RuntimeException("please login")); } } else { callback.onContinue(postcard); } } @Override public void init(Context context) { } } //添加拦截器到ARouter ARouter.getInstance().addInterceptor(new LoginInterceptor());
2、自定义注解
ARouter支持自定义注解,可以更方便地进行参数传递和路由匹配。
//定义自定义注解 @Target(ElementType.TYPE) @Retention(RetentionPolicy.CLASS) @Route(path = "/module/coupon") public @interface CouponRouter { String discount(); } //使用自定义注解 @CouponRouter(discount = "0.5") public class CouponActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { String discount = getIntent().getStringExtra("discount"); super.onCreate(savedInstanceState); setContentView(R.layout.activity_coupon); TextView textView = findViewById(R.id.text); textView.setText("discount:" + discount); } } //通过自定义注解跳转 ARouter.getInstance() .build(RouteConstants.CouponRouter) .withString("discount","0.5") .navigation();
3、参数注入
ARouter支持使用@Autowired注解进行参数注入,可以更方便地实现页面间数据传递。
//在ModuleA子模块中定义跳转参数 @Route(path = "/moduleA/info") public class InfoActivity extends AppCompatActivity { @Autowired String name; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_info); TextView textView = findViewById(R.id.text); textView.setText("name:" + name); } } //在ModuleB子模块中跳转并传递参数 ARouter.getInstance() .build("/moduleA/info") .withString("name", "Tom") .navigation();
四、总结
AndroidRouter是一个轻量级的Android组件化框架,主要用于应用的模块化和解耦。使用该框架可以方便地实现各模块间的通讯、数据传递和事件分发等功能。同时,该框架还支持拦截器、自定义注解和参数注入等功能,可以根据实际需要进行使用。