Android 组件化利器:WMRouter 与 DRouter 的选择与实践

news2024/11/24 21:06:22

在移动端开发中,组件化模块化 是常见的开发策略。随着项目的规模增大,不同功能之间的依赖、耦合度会变得越来越复杂,模块间的解耦成为不可避免的需求。路由框架正是在这种需求背景下应运而生。本文我们将讨论两款在Android开发中比较流行的路由框架:WMRouterDRouter
在这里插入图片描述


什么是 WMRouter?

WMRouter 是美团团队推出的一个用于 Android 组件化的路由框架,它的设计初衷是解决模块间的解耦问题。其核心是通过路由来管理页面跳转,并且支持动态注册路由表编译时自动生成路由表

WMRouter 的核心功能

  1. 页面跳转:通过路由来完成模块间的页面跳转。
  2. 服务发现:不仅仅可以跳转页面,还可以通过路由获取模块提供的服务。
  3. 拦截器机制:支持拦截器,开发者可以对路由的过程进行拦截和处理。
  4. 编译时注解处理:在编译阶段生成路由表,提升运行时性能。

使用 WMRouter 的基本步骤

  1. 依赖添加

    首先在项目的 build.gradle 文件中添加依赖:

    implementation 'com.sankuai.waimai.router:router:1.4.4'
    annotationProcessor 'com.sankuai.waimai.router:compiler:1.4.4'
    
  2. 初始化 Router

    Application 中进行初始化:

    @Override
    public void onCreate() {
        super.onCreate();
        WMRouter.init(this);
    }
    
  3. 定义路由表

    可以通过注解定义路由,比如在某个 Activity 中使用:

    @RouterUri(path = "/test/main")
    public class MainActivity extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    }
    
  4. 发起路由跳转

    路由跳转可以很简单地调用:

    WMRouter.getInstance().startUri(this, "/test/main");
    

DRouter 简介

相比于 WMRouter,DRouter 是滴滴开源的一个组件化路由框架,强调灵活性扩展性。它可以用于页面跳转,也可以用于服务发现和通信等。

DRouter 的核心功能

  1. 多级路由:支持路由链,允许模块层级化。
  2. 动态路由:可以动态地注册和修改路由。
  3. 高扩展性:支持自定义的路由规则和拦截器,开发者可以完全掌控路由的行为。
  4. 服务注入:不仅可以跳转页面,还可以动态地注入服务。

DRouter 的使用步骤

  1. 依赖添加

    build.gradle 文件中加入依赖:

    implementation 'io.github.didi:drouter-api:1.0.0'
    annotationProcessor 'io.github.didi:drouter-compiler:1.0.0'
    
  2. 初始化 DRouter

    Application 中进行初始化:

    @Override
    public void onCreate() {
        super.onCreate();
        DRouter.init(this);
    }
    
  3. 定义路由表

    使用 @Router 注解定义路由:

    @Router(path = "/sample/home")
    public class HomeActivity extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_home);
        }
    }
    
  4. 路由跳转

    跳转页面的调用非常简单:

    DRouter.build("/sample/home").start(this);
    

WMRouter 和 DRouter 的对比

两者都是路由框架,核心目的都是为了模块间的解耦和页面跳转,但它们在设计理念上有一些不同:

  1. WMRouter 更注重性能,采用了编译时路由表生成的机制,运行时性能较好,适合大项目的高效运行。
  2. DRouter 更加灵活,支持动态路由的修改和注册,适合需要动态化需求的场景,比如当应用模块较多且模块间关系不断变化时,DRouter 提供了更高的可控性。
  3. 拦截器机制:两者都支持拦截器,但 DRouter 提供了更多的定制能力,拦截规则可以随业务需求灵活扩展。

选择建议

  • 如果你的项目结构较为稳定,且追求高性能,WMRouter 可能是更好的选择。
  • 如果你的项目需要经常变更模块间的路由关系,或者希望更灵活的路由管理,DRouter 的动态特性将更适合。

总结

在 Android 组件化开发中,路由框架 的引入极大地提升了模块之间的解耦性,既简化了页面跳转的代码,也让服务发现更加优雅。WMRouterDRouter 是其中的两款优秀框架,各自有其优点,如何选择可以根据项目的具体需求来决定。

推荐在小型且稳定的项目中使用 WMRouter,而在大型且经常需要动态调整的项目中采用 DRouter

// WMRouter 路由跳转示例
WMRouter.getInstance().startUri(this, "/test/main");

// DRouter 路由跳转示例
DRouter.build("/sample/home").start(this);

灵活运用路由框架,将会使得你的 Android 组件化开发更加高效优雅

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2193657.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PyEcharts教程(002):上手PyEcharts

2、上手PyEcharts(以jupyter notebook编译) 2.1 如何查看pyecharts版本 import pyecharts print(pyecharts.__version__)2.2 上手Pyecharts 首先绘制第一个图表 from pyecharts.charts import Bar # 创建柱形图对象 bar Bar() # 添加x轴 bar.add_xa…

51单片机的红外感应洗手器【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机红外感应传感器继电器LED等模块构成。适用于智能红外感应自动洗手器等相似项目。 可实现功能: 1、红外感应传感器实时检测是否有人体接近(距离小于20cm) 2、如果有人靠近,继电器自动闭合&#…

ZJYYC2360. 圆球的最大得分

思路&#xff1a;这是一道区间dp的题目。最大的数放在最远处会更优&#xff0c;所以每个小孩可以放在 l 处或 r 处&#xff0c;即这段区间的最左边或最右边。这题可以用记忆化搜索来写&#xff0c;用dp[l][r]来记录 i ~ j 之间调整位置后的最大得分。 #include <bits/stdc.…

学校周赛(3)

​ A: 题目&#xff1a; ​​​​​​​ 解题&#xff1a; 本道题木只需要找到一个*的位置&#xff0c;并且查看这个*是否满足四种情况即可&#xff0c;对与判断的体哦见是四周不出现任何的*,由于每次搜索我们首先搜索到的的最左上角的*,因此我们以左上角的为中心进行讨论…

在VSCode中使用Excalidraw

概述 Excalidraw是一款非常不错的示意图绘制软件&#xff0c;没想到在VSCode中有其扩展&#xff0c;可以在VScode中直接使用。 安装扩展 使用 需要创建.excalidraw.svg、.excalidraw或.excalidraw.png等名称的文件。 搭配手写版使用 自由画笔工具可以配合手写板&#xff0c…

【算法】DFS 系列之 穷举/暴搜/深搜/回溯/剪枝(下篇)

【ps】本篇有 8 道 leetcode OJ。 目录 一、算法简介 二、相关例题 1&#xff09;字母大小写全排列 .1- 题目解析 .2- 代码编写 2&#xff09;优美的排列 .1- 题目解析 .2- 代码编写 3&#xff09;N 皇后 .1- 题目解析 .2- 代码编写 4&#xff09;有效的数独 .1-…

教育领域的技术突破:SpringBoot系统实现

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…

Excel中的屠龙大招

indirect的地位部分动摇&#xff0c;神坛下已初生大力骑士——“”。 (笔记模板由python脚本于2024年10月06日 18:57:11创建&#xff0c;本篇笔记适合同时喜欢python和Excel的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&…

C++——模拟实现list

1.初步实现结点和链表 namespace jxy {template<class T>struct list_node{T _data;list_node<T>* _prev;list_node<T>* _next;list_node(const T& x T()):_data(x),_prev(nullptr),_next(nullptr){}};template<class T>class list//list的框架本…

C# 雷赛运动控制器 SMC304 新建工程

雷赛SMC304资料下载地址 https://www.leisai.com/cn/cpzx/info_36_itemid_3389_lcids_140_cid_3340.html 在官网下载需要的资料 新建文件 在官网下载的资料中找出需要三个文件 把文件添加到现有的项目中 编译选择x64 将连接雷赛电脑的网口IP号改为&#xff1a;如下图所示

深度学习环境安装

**前置知识&#xff1a; 1、各个软件之间的关系&#xff1a; pytorch/tensorflow库&#xff0c;调用cuda runtime version&#xff0c;接着cuda调用驱动&#xff08;cuda driver version&#xff09;&#xff0c;最后驱动又调用GPU显卡。 Anaconda&#xff1a; 集成了python&…

华为海思:大小海思的双轮驱动战略分析

华为海思,作为华为旗下的半导体设计部门,近年来在芯片设计领域取得了显著成就,成为了中国乃至全球芯片设计的重要力量。实际上,华为海思并非单一实体,而是由两个主要分支构成:大海思和小海思。这两个分支虽然同属华为海思,但在定位、产品布局以及市场策略上有所不同,共…

YOLOv8改进 - 注意力篇 - 引入EMA注意力机制

一、本文介绍 作为入门性篇章&#xff0c;这里介绍了EMA注意力在YOLOv8中的使用。包含EMA原理分析&#xff0c;EMA的代码、EMA的使用方法、以及添加以后的yaml文件及运行记录。 二、EMA原理分析 EMA官方论文地址&#xff1a;EMA文章 EMA代码&#xff1a;EMA代码 EMA注意力机…

Oracle中MONTHS_BETWEEN()函数详解

文章目录 前言一、MONTHS_BETWEEN()的语法二、主要用途三、测试用例总结 前言 在Oracle数据库中&#xff0c;MONTHS_BETWEEN()函数可以用来计算两个日期之间的月份差。它返回一个浮点数&#xff0c;表示两个日期之间的整月数。 一、MONTHS_BETWEEN()的语法 MONTHS_BETWEEN(dat…

毕业设计项目 基于大数据人才岗位数据分析

文章目录 1 前言1. 数据集说明2. 数据处理2.1 数据清洗2.2 数据导入 3. 数据分析可视化3.1 整体情况&#xff08;招聘企业数、岗位数、招聘人数、平均工资&#xff09;3.2 企业主题行业情况公司类型最缺人的公司 TOP平均薪资最高的公司 TOP工作时间工作地点福利词云 3.3 岗位主…

晶体管最佳效率区域随频率逆时针旋转原因分析

晶体管最佳效率区域随频率逆时针旋转原因分析 在功率放大器的设计时&#xff0c;晶体管最佳区域随频率逆时针旋转。但是&#xff0c;对于一般的微带电路&#xff0c;匹配阻抗区域是随着频率顺时针旋转的&#xff08;也有称这个特性是Foster特性&#xff09;&#xff0c;因此功…

运动员场景分割系统源码&数据集分享

运动员场景分割系统源码&#xff06;数据集分享 [yolov8-seg-HGNetV2&#xff06;yolov8-seg-aux等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Global Al lnnovati…

基于SpringBoot+Vue+MySQL的在线学习交流平台

系统展示 用户前台界面 管理员后台界面 系统背景 随着互联网技术的飞速发展&#xff0c;在线学习已成为现代教育的重要组成部分。传统的面对面教学方式已无法满足广大学习者的需求&#xff0c;特别是在时间、地点上受限的学习者。因此&#xff0c;构建一个基于SpringBoot、Vue.…

CPU 多级缓存

在多线程并发场景下&#xff0c;普通的累加很可能错的 CPU 多级缓存 Main Memory : 主存Cache : 高速缓存&#xff0c;数据的读取存储都经过此高速缓存CPU Core : CPU 核心Bus : 系统总线 CPU Core 和 Cache 通过快速通道连接&#xff0c;Main menory 和 Cache 都挂载到 Bus 上…

gm/ID设计方法学习笔记(二)

一、任务 设计一个二级运放&#xff0c;第一级为有源负载差动对&#xff08;五管OTA&#xff09;&#xff0c;第二级为电流源负载的共源极。 二、参数指标 GBW≥50MHz|Av|≥80dBPM60~70SR≥50V/us10pF 本文使用smic13mmrf_1233工艺库进行设计。 三、电路设计 &#xff08;…