Android组件化开发路由的设计实践
作者:breaktian 发布时间:2021-06-20 00:27:24
标签:android,组件化,路由
调研了一下目前的路由框架,ARouter(阿里的),ActivityRouter都使用了apt技术 编译时注解,个人想法是一口吃不成胖子,先做个比较实用的。 VpRouter路由框架主要应用于组件化开发中
设计目的
解耦
跨模块跳转
方便服务器配置schema,实现动态配置跳转目标
对外部提供远程访问的功能,实现跨应用调用响应
主要功能点
支持intent,http,schema三种跳转
路由表支持xml配置,可自定义,支持多路径
有 *
同时支持反射和隐式意图
支持结果回调
支持参数传递
链式调用
支持url模式传参
支持配置多个webview 实现指定非默认的webview启动url
支持配置多个prefix
重要的类
VpRouter 单例模式 入口类
AbsRouter 路由抽象类 主要代码
RouterTable 路由表
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>
schema-prefix: 前缀
default-webview: 默认webview的schema
每一个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>;
来源:https://segmentfault.com/a/1190000014910951


猜你喜欢
- WebSocket介绍WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。在WebSocket API中
- 一种可以设置滑动动画的控件,只显示一行布局,在布局文件中的ViewFlipper控件中顺序写好每一行的布局(1).MainActivity.
- 使用Java语言编写一个模拟网上超市购物结算功能的程序,要求程序运行后有一个图形用户界面,可供用户输入购买的各种商品相关信息,最后给出用户的
- CountDownLatch 是一个同步工具类,用来协调多个线程之间的同步,它能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。
- 一、关联映射举例关系说明数据库创建表,student,teacher关系说明:一个老师可以有多个学生一个学生只有一个老师一个老师对学生:一对
- 在淘宝、京东等电商举办活动的时候,经常可以看到在移动客户端推出的各种刮奖活动,而这种活动也受到了很多人的喜爱。从客户端的体验来说,这种效果应
- 1.前言初始化就是给变量一个初始值。 初始化的目的是为了让变量有值,防止使用时出现异常。在构造函数中,有一项重要功能就是对成员变量进行初始化
- 本文实例讲述了C#画笔使用复合数组绘制单个矩形的方法。分享给大家供大家参考。具体实现方法如下:using System;using Syst
- SpringBoot项目jar发布获取jar包所在目录路径ApplicationHome ah = new ApplicationHome(
- 1. 新建TestServlet类package com.yanek.test;import java.io.IOException;imp
- 前言现在市面上很多应用都会有当用户按返回键的时候提示用户:再按一次将退出应用的提示,也就是双击双击返回键退出应用,接下来我们就用几种办法来实
- 本文实例为大家分享了Android实现图片查看器的具体代码,供大家参考,具体内容如下效果需要两个手指禁止缩放,所以没有光标,只能用手机投放电
- 结论先行Kotlin协程中的Channel用于处理多个数据组合的流,随用随取,时刻准备着,就像自来水一样,打开开关就有水了。Channel使
- 问题(1)重入锁是什么?(2)ReentrantLock如何实现重入锁?(3)ReentrantLock为什么默认是非公平模式?(4)Ree
- 首先,通过代码定义一个委托和下面三个示例将要调用的方法:public delegate int AddHandler(int a,int b
- 这篇文章主要介绍了Java并发CopyOnWrite容器原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值
- 每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。代码public cla
- C# 和 java 比较:java 中使用的是接口。C# 使用委托机制,可以用时 + 运算符进行注册,直接多播。而 java 中是一般是使用
- 一、回传协议接口和TCP方式实现:1.接口:import java.nio.channels.SelectionKey; import ja
- 背景使用flowable自带的flowable-ui制作流程图使用springboot开发流程使用的接口完成流程的业务功能一、flowabl