ARouter路由的详细使用

ARouter是一款由阿里推出的页面路由框架,旨在解决Android组件化开发中的页面跳转和通信问题,降低组件间的耦合度。它提供了解决组件独立、自动注册、页面跳转监听、拦截器、降级策略等功能。ARouter支持多种页面跳转方式,包括携带参数、请求码、自定义对象等,还允许添加自定义拦截器和降级策略,以及跨模块API调用。此外,ARouter还支持通过URL跳转和添加页面动画。
摘要由CSDN通过智能技术生成

一.ARouter是什么

ARouter是由阿里推出的一款页面路由框架,主要用于组件化开发过程中,组件之间页面的跳转和通信,确保组件之间没有相互依赖,也能进行跳转

二.为什么要使用ARouter

Android原始的页面跳转最常用到的是显示Intent和隐式Intent跳转方式

显示Intent跳转:

Intent intent = new Intent(this,XXXActivity.class);

startActivity(intent);

缺点:由于需要直接持有对应class,从而导致了强依赖关系,提高了耦合度

隐式Intent跳转:

Intent intent = new Intent();

intent.setAction(“com.android.activity.MY_ACTION”);

startActivity(intent);

缺点:action等属性的定义在Manifest,导致了扩展性较差,规则集中式管理,导致协作变得非常困难。

使用原生Intent跳转时,跳转的过程开发者无法干预,一些埋点,登录判断等通用的逻辑操作比较难实现,不可能再每一个页面去单独判断,我们的目标是在页面跳转的过程统一去判断,而原生的跳转方式无法实现,所以才有了ARouter页面路由。

ARouter页面路由可以解决的问题:

1.可以实现多个组件之间的跳转,确保各个组件之间相互独立,互不依赖

2.可以实现自动注册(只要添加了相关注解,就可以实现自动注册到ARouter框架)

3.可以知晓页面跳转的过程,对跳转的过程进行监听(降级策略)

4.可以对页面跳转进行拦截(登录判断,埋点)

5.支持InstantRun

6.可以直接解析标准URL进行跳转,并自动注入参数到目标页面中

7.可以通过控制反转来做组件解耦(IProvider)

ARouter典型的应用场景:

1.从外部URL映射到内部页面,以及参数传递与解析

2.跨模块页面跳转,模块间解耦

3.拦截跳转过程,处理登陆、埋点等逻辑

4.跨模块API调用,通过控制反转来做组件解耦

ARouter的原理:

ARouter框架主要是采用注解的形式,为目标Activity添加@Route注解,我们称之为路由。路由框架会在编译时期通过apt生成一些存储path和activity.class映射关系的类文件,当app进程启动的时候,加载目标Activity类文件时,把保存这些映射关系的数据读到内存(保存在map中,path=A.class),然后在进行路由跳转时,通过build()方法传入的目标页面的path路劲,ARouter框架会用这个path路劲从路由表(map容器)里面找到对应的Activity.class类文件,然后new Intent(context, activity.Class),当调用ARouter的withString()方法它的内部会调用intent.putExtra(String name, String value),调用navigation()方法,它的内部会调用startActivity(intent)进行跳转,这样便可以实现两个相互没有依赖的module顺利的启动对方的Activity了。

三.ARouter怎么用

1.框架依赖

在项目的build.gradle中defaultConfig闭包中添加

 javaCompileOptions {
            annotationProcessorOptions {
                arguments = [moduleName: project.getName()]
            }
        }

在dependencies中添加

 // 替换成最新版本, 需要注意的是api
    // 要与compiler匹配使用,均使用最新版可以保证兼容
    implementation 'com.alibaba:arouter-api:1.3.1'
    annotationProcessor 'com.alibaba:arouter-compiler:1.1.4'

2.在Application中初始化ARouter

 @Override
    public void onCreate() {
        super.onCreate();
        if (BuildConfig.DEBUG) {    // 这两行必须写在init之前,否则这些配置在init过程中将无效
            ARouter.openLog();     // 打印日志
            ARouter.openDebug();   // 开启调试模式(如果在InstantRun模式下运行,必须开启调试模式!线上版本需要关闭,否则有安全风险)
        }
        ARouter.init(this); // 尽可能早,推荐在Application中初始化
    }

3.常用的功能:

3.1.普通不带参数的页面跳转(等价于startActivity())

目标Activity:添加@Router注解,定义唯一识别的路劲path,path路劲必须两级

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值