美文网首页Android路由
Android 路由跳转框架ARouter

Android 路由跳转框架ARouter

作者: 皇马船长 | 来源:发表于2017-01-12 17:48 被阅读1481次

    平时在项目中 ,实现Activity的跳转都是使用的startActivity来实现的。今天发现一个路由框架,不但可以很好的实现这个功能,而且还有其他的一些 。

    android 原生activity跳转代码:

         Intent intent = new Intent(this,OtherActivity.class);
         intent.putExtra("key","ARouter");
         startActivity(intent);
    

    ARouter 简单用法

    1. 在gradle 文件中加入依赖
      app gradel 文件中添加
    apply plugin: 'com.neenbedankt.android-apt'
    }
    apt {
        arguments {
            moduleName project.getName();
        }
    }
    dependencies {
          apt 'com.alibaba:arouter-compiler:1.0.1'
          compile 'com.alibaba:arouter-api:1.0.2'
    }
    

    project gradle

    buildscript {
        repositories {
            jcenter()
        }
        dependencies {
            classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
        }
    }
    allprojects {
        repositories {
            jcenter()
        }
    }
    
    1. activity页面跳转
      新建一个目标Activity , 并在类名上添加Route注解,注意path 名称是有要求的
    • 必须是以 / 开头
    • 必须包括两个 / ,比如 /main/test ,否则会抛异常
    if (StringUtils.isEmpty(path) || !path.startsWith("/")) {
                throw new HandlerException(Consts.TAG + "Extract the default group failed, the path must be start with '/' and contain more than 2 '/'!");
     }
    
    @Route(path = "/main/test")
    public class OtherActivity extends AppCompatActivity {
        
        String key;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_other);
    
            TextView textView = (TextView) findViewById(R.id.text);
            key = getIntent().getStringExtra("key");
            if (!TextUtils.isEmpty(key)){
                textView.setText(key);
            }else{
                textView.setText("无参数");
            }
        }
    }
    

    启动activity 的代码如下:

     @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.btn1:// 不带参数启动
                    ARouter.getInstance()
                            .build("/main/test")
                            .navigation();
                    break;
                case R.id.btn2:// 传递参数启动
                    ARouter.getInstance()
                            .build("/main/test")
                            .withString("key","ARoute")
                            .navigation();
                    break;
    

    进阶用法

    ARouter.openLog();//开启日志
    ARouter.openDebug();//启动debug 模式, 这样一些log日志可以显示出来
    

    其他进阶用法,如根据scheme启动 、 拦截器等 可以参考github 项目文档 。

    学习中遇到的问题

    1. 按照文档配置好后,点击按钮,没有实现页面跳转 ,这个问题现在也没有搞明白,在github上提出issue后,作者那边运行我的demo代码很正常,后来我把代码打包成apk文件,安装运行,跳转功能就正常了,真是见鬼了 。
      日志信息:
    01-11 23:21:21.053 5815-5815/demo.com.svddemo I/ARouter::: ARouter openLog[ ] 
    01-11 23:21:21.053 5815-5815/demo.com.svddemo I/ARouter::: ARouter openDebug[ ] 
    01-11 23:21:21.053 5815-5815/demo.com.svddemo I/ARouter::: ARouter init start.[ ] 
    01-11 23:21:21.062 5815-5815/demo.com.svddemo D/ARouter::: LogisticsCenter has already been loaded, GroupIndex[0], InterceptorIndex[0], ProviderIndex[0][ ] 
    01-11 23:21:21.062 5815-5815/demo.com.svddemo I/ARouter::: ARouter init success![ ] 
    01-11 23:21:21.062 5815-5815/demo.com.svddemo I/ARouter::: Thread production, name is [ARouter task pool No.1, thread No.1][ ] 
    01-11 23:21:21.062 5815-5815/demo.com.svddemo I/ARouter::: ARouter init over.[ ] 
    
    

    里面 GroupIndex 索引为0,没有发现任何路由映射,应该是没有生成映射文件 。

    参考文档

    github 项目地址

    相关文章

      网友评论

      • 小刘哥可爱多:我也是直接运行不能跳转,签名打包apk就可以跳转。而且,签名打包后,再直接运行 就可以跳转了,什么情况。
      • xiaobinZh:原理分析的很透彻。 但是使用有点重,而且 会导致 InstantRun,失败。
        可以参考下 https://github.com/gybin02/RouterKit。 也是用了 APT,但是参考的是 Google
        auto-service 里面的代码,使用APT直接生成 配置文件。
      • 倚风冬听雨_3fef:关于为0的问题升级版本就解决了
        LogisticsCenter has already been loaded, GroupIndex[0], InterceptorIndex[0], ProviderIndex[0][ ]
        解决方案:

        annotationProcessor 'com.alibaba:arouter-compiler:1.1.2.1'
        compile 'com.alibaba:arouter-api:1.2.1.1'

      本文标题:Android 路由跳转框架ARouter

      本文链接:https://www.haomeiwen.com/subject/qnxjbttx.html