优质文章Android技术Android高级进阶

阿里巴巴ARouter基本使用方法

2018-04-28  本文已影响1602人  wayDevelop

阿里巴巴开源的路由:https://github.com/alibaba/ARouter

ARouter 在模块化的开发中尤为的重要,为了解耦不在需要依赖另一个模块又能实现模块间的跳转,还未了解的可以点上面的链接去了解,这篇文章只是介绍简单的使用方法。

原生跳转方式的不足

显式跳转,Intent intent = new Intent(activity, XXActivity.class);
由于需要直接持有对应class,从而导致了强依赖关系,提高了耦合度

隐式跳转,譬如 Intent intent = new Intent(); intent.setAction(“com.android.activity.MY_ACTION”);
action等属性的定义在Manifest,导致了扩展性较差
规则集中式管理,导致协作变得非常困难。

ARouter的使用

添加依赖和配置

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

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

添加注解
// 在支持路由的页面上添加注解(必选)
// 这里的路径需要注意的是至少需要有两级,/xx/xx

@Route(path = "/test/activity")
public class YourActivity extend Activity {
    ...
}

初始化SDK

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

发起路由操作

  1. 应用内简单的跳转(通过URL跳转在'进阶用法'中)
ARouter.getInstance().build("/test/activity").navigation();
  1. 跳转并携带参数
ARouter.getInstance().build("/test/1")
                .withString("name", "888")
                        .withInt("age", 11)
            .navigation();

3.接受参数
在Activity中获取参数有两种方式,一种是普通Activity那样getIntent().getXXX
加一种是使用@Autowired注解的方式

   @Autowired
    public String name;
    @Autowired(name = "age")
    int age;
 ARouter.getInstance().inject(this);//添加在onCreate()
// ARouter会自动对字段进行赋值,无需主动获取
    Log.d("param", name + age + age);

跳转传递对象

public class TestObj implements Serializable {
    public String name;
    public int id;

    public TestObj() {
    }

    public TestObj(String name, int id) {
        this.name = name;
        this.id = id;
    }
}


入参数
  // 2. 跳转并携带参数
                List<TestObj> list = new ArrayList<>();
                for (int i = 0; i < 5; i++) {
                    TestObj testObj = new TestObj("Rose" + i, 777);
                    list.add(testObj);
                }
                ARouter.getInstance().build(ARouterManager.BModuleActivity)
                        .withString("name", "老王")
                        .withInt("age", 18)
                        .withString("url", "https://a.b.c")
                        .withSerializable("pac", (Serializable) list)
                        .navigation();

            }

#接受参数
 List<TestObj> chooseList = (List<TestObj>) getIntent().getSerializableExtra("pac");//获取list方式
 txt.setText("name:" + chooseList.size());
上面是按照原生的getXXX获取跳转参数
另一种得到参数方式
和上述方式一样添加
 @Autowired
  TestObj  obj;
ARouter.getInstance().inject(this);
// 如果需要传递自定义对象,需要实现 SerializationService,并使用@Route注解标注(方便用户自行选择序列化方式),例如:
@Route(path = "/service/json")
public class JsonServiceImpl implements SerializationService {
    @Override
    public void init(Context context) {

    }

    @Override
    public <T> T json2Object(String text, Class<T> clazz) {
        Log.w("TAG", "text---" + text);
        return new Gson().fromJson(text, clazz);
    }

    @Override
    public String object2Json(Object instance) {
        Log.w("TAG", "Object---" + instance);
        return new Gson().toJson(instance);
    }
}

关注公众号“Android杂货店”,选择关注,干货文章,第一时间送达!


Android杂货店
上一篇下一篇

猜你喜欢

热点阅读