Skip to content
Haoge edited this page Aug 17, 2017 · 14 revisions

欢迎使用Router路由框架

什么是router框架

简单来说.即通过一行url去指定打开指定页面Activity(页面路由)或执行特定的任务(动作路由). 充分做到逻辑解耦.

我希望的router框架所能支持的功能

- 可自动解析标准url参数。
- 可传递bundle所支持的所有数据类型,能与原生做到无缝对接。
- 支持拦截器.方便对于部分页面跳转时需要检查是否登录.并跳转登录界面做统一配置
- 支持当路由被拦截后。操作之后恢复路由事件。如拦截后进行登录。登录后自动恢复之前被拦截的路由。
- 如果使用http/https地址时.可以直接跳转至使用浏览器
- 能支持原生跳转的各种方式,如请求码.转场动画的设置.
- 能灵活配置route规则.方便对各种开发环境灵活做兼容适配.如插件化.组件化
- 启动动作路由时。支持切换运行线程。

路由启动方式

  • 路由启动主要分为三种方式:
  1. 页面路由:通过url指定打开特定的页面。并传递数据
  2. 动作路由:通过url指定执行一些特定的动作。如加入购物车等。
  3. 网页路由:当url为普通的http/https链接时。且页面路由与动作路由没有与此url所匹配的路由规则时。将通过启动浏览器的方式打开链接

路由根据使用场景不一样。可以使用不同的用法:

  1. 最简单启动方式。主要用于不关心启动路由类型。不添加额外数据的条件
Router.create(url).open(context);
  1. 指定以非网页路由的方式启动:即可能是页面路由或者是动作路由
1. 使用页面路由并添加额外数据:
Router.create(url).getBaseRoute()
		.addExtras(bundle)// 传递额外数据
		.addInterceptor(interceptor)// 添加路由拦截器
		.open(context);
  1. 指定以动作路由方式启动:
Router.create(url).getActionRoute()
		.addExtras(bundle)// 传递额外数据
		.addInterceptor(interceptor)// 添加路由拦截器
		.open(context);
  1. 指定以页面路由启动:
Router.create(url).getActivityRoute()
		.addExtras(bundle)// 传递额外数据
		.addInterceptor(interceptor)// 添加路由拦截器
		.addFlags(flag)// 参考intent.addFlags(flag)
		.setAnim(enter, exit)// 设置页面跳转转场动画
		.requestCode(requestCode)// 设置请求码
		// 页面路由启动Activity的open方法。可以支持使用fragment进行跳转。
		.open(context);

基础配置及简要说明

路由支持各种的配置操作。主要有以下一些配置:对于全局配置。均使用RouterConfiguration类做统一配置:

  1. 路由规则

    对路由启动提供可供匹配的路由规则。

  2. 路由回调

    对路由事件进行状态监听。主要使用场景可用于埋点统计、日志追踪等。

  3. 路由拦截器

    对路由事件进行判断拦截。拦截后可保存路由url及设置的额外数据。并操作后手动恢复。满足复杂业务配置的需要。

  4. 远程数据提供者

    此方案主要针对插件化环境。由于插件化的启动方式千差万别,而且大多需要提供一些额外数据以供跳转使用。此接口便是针对此环境创建的。可提供每个插件所独有的额外数据供路由启动器使用。进行插件跳转适配。

  5. 路由启动器

    此接口也主要是针对插件化环境而创建的,可在此针对当前的运行环境。使用路由传递的数据及匹配的路由规则。及由对应的远程数据提供者提供的额外数据。定制出自身的启动器。提供使用。

  6. 安全验证

    用于对启动的远程路由数据提供服务进行安全验证。避免被外部app随意连接,重置注册到远程服务中的路由表

插件化兼容

自版本号 2.4+ 起。Router新增了部分接口。用于针对各种不同的插件化框架方便的进行适配并兼容使用。

目前针对一些常见的插件化版本。做了一些对应的demo。详细请参考demos

或者点此查看插件化配置说明,了解更多原理