Android组件化开发路由的设计实践

所属分类: 软件编程 / Android 阅读数: 68
收藏 0 赞 0 分享

调研了一下目前的路由框架,ARouter(阿里的),ActivityRouter都使用了apt技术 编译时注解,个人想法是一口吃不成胖子,先做个比较实用的。 VpRouter路由框架主要应用于组件化开发中

设计目的

  1. 解耦
  2. 跨模块跳转
  3. 方便服务器配置schema,实现动态配置跳转目标
  4. 对外部提供远程访问的功能,实现跨应用调用响应

主要功能点

  1. 支持intent,http,schema三种跳转
  2. 路由表支持xml配置,可自定义,支持多路径
  3. 有拦截器
  4. 同时支持反射和隐式意图
  5. 支持结果回调
  6. 支持参数传递
  7. 链式调用
  8. 支持url模式传参
  9. 支持配置多个webview 实现指定非默认的webview启动url
  10. 支持配置多个prefix

重要的类

  1. VpRouter 单例模式 入口类
  2. AbsRouter 路由抽象类 主要代码
  3. RouterTable 路由表
  4. IRouterInterceptor(拦截器) IRouterResultCallback(结果回调)

类图

加载路由配置文件

//导入路由表 在application的onCreate中
VpRouter.load(getApplicationContext(),"router.xml");

路由配置文件

<?xml version="1.0" encoding="utf-8" ?>
<root>
  schema-prefix>
    <prefix>vf://</prefix>
    <prefix>vipjr://</prefix>
    <prefix>vpjr://</prefix>
  </schema-prefix>
  <default-webview>vpjr://h5.page</default-webview>
  <rule>
    <schema>vpjr://h5.page</schema>
    <!--<action>webview</action>-->
    <class>com.vip.hybrid.h5container.H5WebViewActivity</class>
  </rule>
  <rule>
    <schema>vpjr://h5.page.pay</schema>
    <!--<action>webview</action>-->
    <class>com.vip.vpal.paydesk.support.h5.H5ContainerActivity</class>
  </rule>
  <rule>
    <schema>vpjr://paycode.entry</schema>
    <!--<action>1111</action>-->
    <class>com.vip.vpal.paycode.presentation.activity.PaymentEntryActivity</class>
  </rule>
  <rule>
    <schema>vpjr://guide</schema>
    <!--<action>basemodule.test.mainactivity</action>-->
    <class>com.vip.vf.android.GuideActivity</class>
  </rule>
</root>
  1. schema-prefix: 前缀
  2. default-webview: 默认webview的schema
  3. 每一个rule节点代表一组路由规则,被解析成Rule对象

使用示例

//启动url 默认的webview
VpRouter.get().context(this).jump("http://www.vip.com?web_title=唯品会");
//指定webview启动
VpRouter.get().context(this).webView("vpjr://h5.page.pay").jump("http://www.vip.com");

//最复杂的使用
VpRouter.get()
    .context(this)
    .setInterceptor(new IRouterInterceptor() {
      @Override
      public boolean cancel() {
        return false;//return true 会把本次跳转拦截掉
      }

      @Override
      public Bundle addExtras() {
        return null;//返回Bundle 会添加到Intent中
      }
    })
    .setResultCallback(new IRouterResultCallback() {
      @Override
      public void onSuccess() {
        //跳转成功的回调
      }

      @Override
      public void onFail(RouterError error) {
        //跳转失败的回调
        LogUtils.d("error:"+error);
      }
    })
    .extra("key","value")
    .extra("key2","value2")
    .flags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
    .jump("vf://paycode.entry?title=1111");//支持url传参

//最简单的使用
VpRouter.get().context(this).jump("vpjr://guide");
VpRouter.get().context(this).jumpForResult("vpjr://guide",REQUEST_CODE);//REQUEST_CODE>;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

Android网络编程之获取网络上的Json数据实例

这篇文章主要介绍了Android网络编程之获取网络上的Json数据实例,本文用完整的代码实例讲解了在Android中读取网络中Json数据的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中的windowSoftInputMode属性详解

这篇文章主要介绍了Android中的windowSoftInputMode属性详解,本文对windowSoftInputMode的9个属性做了详细总结,需要的朋友可以参考下
收藏 0 赞 0 分享

Android网络编程之UDP通信模型实例

这篇文章主要介绍了Android网络编程之UDP通信模型实例,本文给出了服务端代码和客户端代码,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中使用ListView实现漂亮的表格效果

这篇文章主要介绍了Android中使用ListView实现漂亮的表格效果,本文用详细的代码实例创建了一个股票行情表格,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中刷新界面的二种方法

这篇文章主要介绍了Android中刷新界面的二种方法,本文使用Handler、postInvalidate两种方法实现界面刷新,需要的朋友可以参考下
收藏 0 赞 0 分享

Android SDK三种更新失败及其解决方法

这篇文章主要介绍了Android SDK三种更新失败及其解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(一)

Android3.0(API level 11)开始,Android设备不再需要专门的菜单键。随着这种变化,Android app应该取消对传统6项菜单的依赖。取而代之的是提供anction bar来提供基本的用户功能
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(二)

这次将继续上一篇文章没有讲完的Menu的学习,上下文菜单(Context menu)和弹出菜单(Popup menu)
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(三)

今天继续昨天没有讲完的Menu的学习,主要是Popup Menu的学习,需要的朋友可以参考下
收藏 0 赞 0 分享

Android显示网络图片实例

这篇文章主要介绍了Android显示网络图片的方法,以实例形式展示了Android程序显示网络图片的方法,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多