Android 开发进程 0.34 ARouter Evenbus 使用
阿里路由框架ARouter使用
导入
GitHub地址 https://github.com/alibaba/ARouter
android {
defaultConfig {
javaCompileOptions {
annotationProcessorOptions {
arguments = [ moduleName : project.getName() ]
}
}
}
}
dependencies {
api 'com.alibaba:arouter-api:x.x.x'
annotationProcessor 'com.alibaba:arouter-compiler:x.x.x'
}
使用时将库转换为最新版本,此库主要用于相关页面跳转,常规的activity跳转方式有显式和隐式,但这种方式在多module中由于需要相互引用,并不符合解耦的原则,同时维护变得非常繁琐。
初始化
ARouter.openLog(); // 打印日志
ARouter.openDebug(); // 开启调试模式(如果在InstantRun模式下运行,必须开启调试模式!线上版本需要关闭,否则有安全风险)
ARouter.init( this );
大多在application中执行。
使用步骤
@Route(path = "/com/Activity1")
首先在需要跳转的activity类头上添加注解,这个path意思为分组和斜杠后面的路径。可以支持自定义分组。path需要至少二级路径。可以将path统一写到常量路由类中方便调用。
ARouter.getInstance().build("/com/Activity1").navigation();
需要跳转时使用上述代码如在点击事件方法中,path需要保持一致。
<intent-filter>
<data
android:host="com"
android:scheme="arouter" />
</intent-filter>
如果需要使用url跳转可以在manifest文件中activity中添加属性,这可以实现HTML与原生的交互。
ARouter.getInstance().build("/com/Activity1").navigation(this,100 );
如需要实现类似startActivityForResult()的返回处理可以添加请求吗。同时在链式调用中可以添加writeXX方法携带String bundle等类型数据,取出数据与基础的startActivity方法相同,在目标activity的生命周期方法中使用 getIntent方法继而通过传输键值对的key值获取value。或者使用注解@Autowired直接传递到变量中。
值得注意的是如果请求的path找不到框架会显示一个toast信息。
navigation(Context context, NavigationCallback callback)
navigati中支持处理回调。最新版本3.1.1支持两个回调,还有一个简单的NavCallback
回调类,只支持路由的成功拉起和被拦截两个方法,而NavigationCallback方法较多。
interceptor拦截器使用
@Interceptor(priority = 2)
public class Test1Interceptor implements IInterceptor {
@Override
public void process(Postcard postcard, InterceptorCallback callback) {
if (postcard.getPath().equals("/test/test1")) {
}
callback.onContinue(postcard);
}
@Override
public void init(Context context) {
}
}
上述代码自定义了拦截器,其中postcard.getPath()方法获取的就是路由的path,当path匹配时,可以return结束process方法,注意如无提前return,后续必须执行毁掉的onContinue方法,第二 优先值priority不可以与其他拦截器相同。第三 阿里路由是有缓存的,在刚创建或更改路由类时可能需要卸载安装app才能覆盖安装测试,否则可能出现不生效的问题。