美团开源路由框架(WMRouter)学习——使用篇

前言

由于花了比较多的时间学习该框架,初步打算分三篇文章去介绍,分别是:使用篇,源码解析篇,以及关键技术解读篇,欢迎关注探讨。WMRouter

目前的困境及想法

由于笔主之前在一个搞教育行业的某某公司,该公司开发了一个整合app,里面包括了“课前预习”、“课后复习”、“错难题复习”、“笔译”、“听力练习”、“教室监控”等模块,另外还包括学生端和教师端,并且除了以模块的形式导入到主工程还有独立打包成单独的app。由于最初是各自开发自己独立的模块,没有什么沟通和约定的,所以最初的合并经历了一段痛苦的煎熬,遇到了不小的挑战初步形成了以下的结果

  • 资源冲突:在所有的模块资源统一加上前缀
  • 引入依赖库版本不同以及重复引用: 约定好一些公共的基础库(比如网络,图片加载,数据解析等)
  • 打包时间过长(我用的mac打包时间在10分钟左右,同时用的windows 8g运行内存打包时间在40多分钟):没有彻底解决
  • 主工程引用自module直接通过实现类实现跳转未能实现接口分离:没有解决
  • 同层级的业务库不好通信:没有解决

虽然笔主已经离开这家公司已经快一年时间,不过有时间总会回忆起以前采坑的种种。
在学习该框架之后,我会这样的改进



按照官方的说法主要可以解决四个问题

  • 通信问题
  • 复用问题
  • 依赖注入
  • 编译问题

详细参见官方指导或在文末查看参考链接
接下来介绍如何使用

使用

五个注解的使用

官方提供了五个注解,分别是RouterUriRouterServiceRouterRegexRouterProviderRouterPage,接下来分别介绍它们的使用

RouterUri

说明:可以注解在Activity(可以是类名字符串或者是类)和UriHandler上

  • String[] path :定义的路径
  • String scheme,host :定义协议和域名 根据协议和域名可以实现外部跳转(具体下面会讲如何跳转)
  • boolean exported: 是否允许外部跳转
  • Class[] interceptors:对Request拦截处理

例子

由于官方demo里都有案例,这里我就讲一个demo没有的情况:从其他app跳转到指定的类
在官方demo里有个类UriProxyActivity在AndroidManifest.xml定义了过滤条件(intent-filter

 <data
                    android:host="demo_host"
                    android:scheme="demo_scheme" />

这里我们在别的app启动UriProxyActivity就可以通过

  Intent intent = new Intent();
                intent.setData(Uri.parse("demo_scheme://demo_host/not_exported"));
                startActivity(intent);

来进行跳转,运行该跳转发现弹出Toast “没有权限(403)”,说明跳转成功,相应的改成demo_scheme://demo_host/exported则跳转到ExportedActivity

PS: ExportedActivity的exported 设置为true
NotExportedActivity设置为false

RouterService

说明:声明一个Service,通过interface和key加载实现类。此注解可以用在任意类上
这算是一个工具,通过Router的相应方法可以直接获取相应的实现类
相应的方法有

  • <I, T extends I> T getService(Class<I> clazz, String key)
    创建指定key的实现类实例,使用 {@link RouterProvider} 方法或无参数构造
  • <I, T extends I> T getService(Class<I> clazz, String key, Context context)
    创建指定key的实现类实例,使用Context参数构造
  • <I, T extends I> List<T> getAllServices(Class<I> clazz)
    创建所有实现类的实例,使用 {@link RouterProvider} 方法或无参数构造

为了方便使用,在router/method里,还提供了各个参数方法,开发者可以通过 <T> T callMethod(String key, Object... args)来调用方法的实现。

通过该注解可以很容易的实现通过接口实现模块间的通信

RouterRegex

说明:指定一个正则匹配的跳转,此注解可以用在Activity和UriHandler上
可以算是RouterUri的扩展,只不过它的匹配规则是通过正则表达式,这里不作过多说明

RouterProvider

说明:指定一个静态方法,用于构造Service
在前面介绍RouterService说过获取接口实现类的时候都会事先获取被RouterProvider注解过的静态方法返回该实现类。

RouterPage

说明:指定一个内部页面跳转,此注解可以用在Activity和UriHandler上

该注解处理且只处理所有格式为 wm_router://page/* 的URI(参见PageAnnotationHandler

其他

其它也没什么要介绍的了,官方的demo已经介绍的足够详细了

PS:蓦然发现 发现这篇文章有点多余!!!很多时间发觉看了源码之后,觉得自己写出如何使用都显得多此一举。有兴趣欢迎看我第二篇文章——源码解析篇。

天气凉了,大家注意保暖

参考链接

https://tech.meituan.com/meituan_waimai_android_open_source_routing_framework.html
https://tech.meituan.com/meituan_food_delivery_android_architecture_evolution.html
https://github.com/meituan/WMRouter

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    X先生_未知数的X阅读 15,960评论 3 119
  • 每天看到崇高的床很乱,我每天要为他收拾房间,每次收拾我都感到无奈,因我说他无数次,让他自己收拾房间他就是不听,为这...
    周淑峰阅读 195评论 0 0
  • 有人说,哲学家型是职场里的悲剧,整天只会空想,犹豫不决还喜欢拖延。其实,这正是你成为哲学家类型的原因——从小是个愣...
    驭爷阅读 1,678评论 2 23
  • 熙熙攘攘,刺眼的阳光,车水马龙,汽车飞驰而过,鸣笛的声音。嘈杂的白天,又似乎只有孤独的一个我。 曾经我害怕...
    晓荍阅读 269评论 6 3
  • 三件事: 打印图纸和签字,跟四宝说他的流程没上传; 出差,车上写一篇《原则》读书记;一篇自自我反思; 阅读天天用英...
    蜗牛说事阅读 224评论 0 0