Android 开发进程 0.34 ARouter Evenbus 使用

2021年09月16日 阅读数:1
这篇文章主要向大家介绍Android 开发进程 0.34 ARouter Evenbus 使用,主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

阿里路由框架ARouter使用

导入

GitHub地址 https://github.com/alibaba/ARouterjava

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中因为须要相互引用,并不符合解耦的原则,同时维护变得很是繁琐。android

初始化

 ARouter.openLog();     // 打印日志
 ARouter.openDebug();   // 开启调试模式(若是在InstantRun模式下运行,必须开启调试模式!线上版本须要关闭,不然有安全风险)
 ARouter.init( this );

大多在application中执行。git

使用步骤

@Route(path = "/com/Activity1")

首先在须要跳转的activity类头上添加注解,这个path意思为分组和斜杠后面的路径。能够支持自定义分组。path须要至少二级路径。能够将path统一写到常量路由类中方便调用。github

  ARouter.getInstance().build("/com/Activity1").navigation();

须要跳转时使用上述代码如在点击事件方法中,path须要保持一致。api

   <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方法较多。app

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才能覆盖安装测试,不然可能出现不生效的问题。框架