ARouter简单使用

ARouter:https://github.com/alibaba/ARouter

参考:
https://github.com/alibaba/ARouter/blob/master/README_CN.md
https://www.jianshu.com/p/6021f3f61fa6

一个用于帮助 Android App 进行组件化改造的框架 —— 支持模块间的路由、通信、解耦

最新版本

模块arouter-apiarouter-compilerarouter-register
最新版本1.5.01.2.21.0.2

一、功能介绍

支持直接解析标准URL进行跳转,并自动注入参数到目标页面中
支持多模块工程使用
支持添加多个拦截器,自定义拦截顺序
支持依赖注入,可单独作为依赖注入框架使用
支持InstantRun
支持MultiDex(Google方案)
映射关系按组分类、多级管理,按需初始化
支持用户指定全局降级与局部降级策略
页面、拦截器、服务等组件均自动注册到框架
支持多种方式配置转场动画
支持获取Fragment
完全支持Kotlin以及混编(配置见文末 其他#5)
支持第三方 App 加固(使用 arouter-register 实现自动注册)
支持生成路由文档
提供 IDE 插件便捷的关联路径和目标类


二、典型应用

从外部URL映射到内部页面,以及参数传递与解析
跨模块页面跳转,模块间解耦
拦截跳转过程,处理登陆、埋点等逻辑
跨模块API调用,通过控制反转来做组件解耦


三、基础功能

1 添加依赖和配置

android {
    defaultConfig {
        ...
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [AROUTER_MODULE_NAME: project.getName()]
            }
        }
    }
}

dependencies {
    // 替换成最新版本, 需要注意的是api
    // 要与compiler匹配使用,均使用最新版可以保证兼容
    compile 'com.alibaba:arouter-api:1.5.0'
    annotationProcessor 'com.alibaba:arouter-compiler:1.2.2'
    ...
}
// 旧版本gradle插件(< 2.2),可以使用apt插件,配置方法见文末'其他#4'
// Kotlin配置参考文末'其他#5'

2 初始化SDK

public class MyApplication extends Application {

//    private MyApplication mApplication;
    private boolean isDebugARouter = true;

    boolean isDebug(){
        return isDebugARouter;
    }

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


3 简单页面跳转

//@Route(path = "/app/MainActivity")
public class MainActivity extends AppCompatActivity {
	...
    public void skip(View view) {
        ARouter.getInstance().build("/app/SecondActivity").navigation();
    }
}
@Route(path = "/app/SecondActivity")
public class SecondActivity extends Activity {
	...
}

4 跳转并携带参数

	// 2. 跳转并携带参数
    public void skip(View view) {
        ARouter.getInstance().build("/app/SimpleActivity")
                .withLong("key1", 666L)
                .withString("key2", "777")
                .withString("key3", "888")
                .withParcelable("key4", new Person("Jack", 26))
                .navigation();
    }
// 为每一个参数声明一个字段,并使用 @Autowired 标注
// URL中不能传递Parcelable类型数据,通过ARouter api可以传递Parcelable对象
@Route(path = "/app/SimpleActivity")
public class SimpleActivity extends Activity {

    @Autowired
    public long key1;
    @Autowired
    String key2;
    @Autowired(name = "key3")
    String mykey3;
    @Autowired
    Person key4;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_simple);
        ARouter.getInstance().inject(this);
        // ARouter会自动对字段进行赋值,无需主动获取
        Log.d("hongxue", "key1 = " + key1);
        Log.d("hongxue", "key2 = " + key2);
        Log.d("hongxue", "key3 = " + mykey3);
        Log.d("hongxue", "key4 = " + key4.getName() + " " + key4.getAge());
    }
}
public class Person implements Parcelable {

    String name;
    int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    protected Person(Parcel in) {
        name = in.readString();
        age = in.readInt();
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeInt(age);
    }

    @Override
    public int describeContents() {
        return 0;
    }

    public static final Creator<Person> CREATOR = new Creator<Person>() {
        @Override
        public Person createFromParcel(Parcel in) {
            return new Person(in);
        }

        @Override
        public Person[] newArray(int size) {
            return new Person[size];
        }
    };
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值