Android ARouter 实战

620 阅读2分钟

这是我参与 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));