一、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組件化框架,主要用於應用的模塊化和解耦。使用該框架可以方便地實現各模塊間的通訊、數據傳遞和事件分發等功能。同時,該框架還支持攔截器、自定義註解和參數注入等功能,可以根據實際需要進行使用。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/192908.html