这是我参与 8 月更文挑战的第 25 天,活动详情查看: 8月更文挑战
背景
由于项目初期对项目框架定义为模块化, 吸取之前在做模块化时跳转的经验以及教训, 在项目初期就开始使用ARouter进行跳转
简介
ARouter是阿里开源的一个 Android 路由中间件,用于对页面、服务提供路由功能
一个用于帮助 Android App 进行组件化改造的框架 —— 支持模块间的路由、通信、解耦
导入依赖
implementation 'com.alibaba:arouter-api:1.5.0'
annotationProcessor 'com.alibaba:arouter-compiler:1.2.2'
防止报错
因为ARouter使用了注解,所以需要进行配置
android {
defaultConfig {
javaCompileOptions {
annotationProcessorOptions {
arguments = [moduleName: project.getName()]
}
}
}
}
初始化
在Application进行初始化
if (BuildConfig.DEBUG) {
// 打印日志
ARouter.openLog();
ARouter.openDebug();
}
ARouter.init(this);
销毁ARouter
销毁ARouter方法, 他只能在调试模式下使用
@Override
public void onTerminate() {
if (BuildConfig.DEBUG) {
ARouter.getInstance().destroy();
}
super.onTerminate();
}
无参跳转
定义Route path常量类
注意, 路由路径至少是两级,xx/xx,一般为模块名+页面名字
public class ModuleRouter {
//Regulatory 页面短地址
/**
* 认证页面
*/
public static final String ACTIVITY_REGULATORY = "/settings/about/Regulatory";
}
在目标页中声明注解
@Route(path = ModuleRouter.ACTIVITY_REGULATORY)
public class AboutRegulatoryActivity extends BaseActivity {
}
创建跳转方法
public static void startRegulatoryActivity(Context context) {
ARouter.getInstance().build(ACTIVITY_REGULATORY).navigation(context);
}
调用跳转
ModuleRouter.startRegulatoryActivity(getBaseContext());
带参跳转
定义Route path常量类
public class ModuleRouter {
//Regulatory 页面短地址
/**
* 版权页面
*/
public static final String ACTIVITY_COPYRIGHT = "/settings/copyright";
public static final String COPYRIGHT_VALUE = "copyright";//版权内容
public static final String COPYRIGHT_TITLE = "title";//版权页面标题
}
在目标页中声明注解
在接收参数页面需要注册注入参数和服务, 否则会接收不到参数
@Route(path = ModuleRouter.ACTIVITY_COPYRIGHT)
public class CopyrightActivity extends BaseActivity {
@Autowired(name = ModuleRouter.COPYRIGHT_VALUE)
String copyright;
@Autowired(name = ModuleRouter.COPYRIGHT_TITLE)
String title;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ARouter.getInstance().inject(this);
}
}
创建跳转方法
public static void startCopyrightActivity(Context context, String value, String title) {
ARouter.getInstance().build(ACTIVITY_COPYRIGHT).withString(COPYRIGHT_VALUE, value).withString(COPYRIGHT_TITLE, title).navigation(context);
}
调用跳转
ModuleRouter.startCopyrightActivity(getBaseContext(), getResources().getString(R.string.copyright_content), getResources().getString(R.string.setting_about_copyright));