ARouter使用

ARouter使用

简介

ARouter是一款阿里的路由框架,通过注解映射页面跳转关系,在组件化的项目架构中有着非常强大的解耦能力。官方地址:https://github.com/alibaba/ARouter

使用步骤

一、在app的build.gradle中添加代码:

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

dependencies {
    // Replace with the latest version
    compile 'com.alibaba:arouter-api:?'
    annotationProcessor 'com.alibaba:arouter-compiler:?'
    ...
}

坑一:我根据gradle的提示,使用的是:com.alibaba:arouter-api:1.3.1,要使用moduleName: project.getName()才不会出现以下错误:

Router::Compiler >>> No module name, for more information, look at gradle log.

而github上的步骤却是AROUTER_MODULE_NAME: project.getName().

坑二:每个module中都应该添加配置

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

坑三:如果是每个模块相互引用,需要在每个模块的build.gradle中添加

annotationProcessor:com.alibaba:arouter-compiler:1.1.4

二、在Application中进行初始化

ARouter.init(mApplication);

三、定义接收方法

@Route(path = "/test/activity") //接收的路径
public class Main2Activity extends AppCompatActivity {

    @Autowired
    public String key; //接收的参数名

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        ARouter.getInstance().inject(this); //该步骤不添加的话,可正常跳转,却不能接收到参数
        Log.d("===", "key:" + key);
    }
}

四、定义发送方法

 ARouter.getInstance().build("/test/activity")
                .withString("key", "hello")
                .navigation();

实际应用

在实际的代码中,我们可以将有些可以抽离出来的放在公共类中
比如:

  1. 将路由名/test/activity放在常量类方便管理
  2. ARouter.getInstance().inject(this)放在BaseActivity中的onCreate
  3. Application中的初始化放在BaseModuleApplication中。

联系

遇到问题或想持续学习,请关注公众号“Android唐浮”

你可能感兴趣的:(Android框架与架构)