路由框架
定义
路由框架是用于管理应用程序中不同组件(如页面、活动、模块等)之间导航和通信的工具。它通常提供了一种简化的方式来处理路由、参数传递和组件间的调用,使得开发者能够更加方便地管理应用的结构和导航。
路由框架的主要功能包括:
- 页面导航:允许在不同的页面或组件之间进行跳转,通常支持传递参数。
- 路由配置:通过配置文件或注解方式定义路由规则,使得路由逻辑更加清晰。
- 参数解析:能够解析并传递参数,确保不同组件之间的数据共享。
- 解耦:降低了组件之间的耦合度,使得每个模块可以独立开发和测试。
- 动态路由:支持在运行时动态添加或修改路由,增强了灵活性。
为什么需要路由框架?
我们来简单说一下路由框架存在的意义:
- 显示Intent:项目庞大以后,类依赖耦合太大,不适合组件化拆分
- 隐式Intent:协作开发困难,调用的时候不知道调什么参数
- 每个注册了Scheme的Activity都可以直接打开,有安全风险
- AndroidMainfest集中式管理比较臃肿
- 无法动态修改路由,如果页面出错,无法动态降级
- 无法动态拦截跳转,例如未登录的情况下,打开登录页面,登录成功后接着打开刚才想打开的页面
- H5、Android、iOS地址不一样,不利于统一跳转
- 在一些复杂的业务场景下(比如电商),灵活性比较强,很多功能都是运营人员动态配置的,比如下发一个活动页面,我们事先并不知道具体的目标页面,但如果事先做了约定,提前做好页面映射,便可以自由配置。
- 简化代码,数行跳转代码精简成一行代码,这个大家应该都很容易理解,无非就是对代码块的封装。
简单实现
新建router-api模块,新建Router类:
public class Router {
private static volatile Router mInstance;//使用 volatile 关键字防止指令重排序,确保在多线程环境中 mInstance 的正确性
public static Router getInstance() {
if (mInstance == null) {
synchronized (Router.class) {
if (mInstance == null) {
mInstance = new Router();
}
}
}
return mInstance;
}
private static Map<String, Class<? extends Activity>> routers = new HashMap<>();
public void register(String path, Class<? extends Activity> cls) {
routers.put(path, cls);
}
public void startActivity(Activity activity, String path) {
Class<? extends Activity> cls = routers.get(path);
if (cls != null) {
Intent intent = new Intent