zoukankan      html  css  js  c++  java
  • 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才能覆盖安装测试,否则可能出现不生效的问题。

    吾生也有涯,而知也無涯。以有涯隨無涯,殆已
  • 相关阅读:
    746. 使用最小花费爬楼梯(动态规划题)
    91.解码方法(动态规划)
    198/213 打家劫舍(动态规划)
    5. 最长回文子串 (从今天开始刷动态规划50题)
    POJ 2142
    HDU 4686
    HDU 4767
    HDU 1757
    POJ 3613
    HDU 2157
  • 原文地址:https://www.cnblogs.com/baimiyishu/p/15291560.html
Copyright © 2011-2022 走看看