[Android]如何做一个崩溃率少于千分之三噶应用app(22)-组件化路由跳转

大家好,我是苍王。以下是我这个系列的相关文章,有兴趣可以参考一下,可以给个喜欢或者关注我的文章。

[Android]如何做一个崩溃率少于千分之三噶应用app--章节列表


大家应该有看完我的第十二编简书的页面跳转会清楚跨module的跳转用Android原生来做是,需要使用隐式跳转完成。

但是原生跳转方式是有很多的局限性的。这里借用ARouter 对跳转的分析的一张图来介绍一下,这个图可以很容易的反映出原生跳转和路由跳转的差异。

(1)显示跳转需要依赖于类,而路由跳转是通过url索引,无需依赖

(2)隐式是通过AndroidMainfest集中管理,协作开发困难,

(3)原生需要在AndroidMainfest里面注册,而路由是用注解来注册

(4)原生只要启动了startActivity就交由Android控制,而路由是使用AOP切面编程可以作控制

这样对比,可以很明显的体现出路由跳转的方面和非常适合组件化解耦。

接下来我会对比下我所知道的两款有口碑的路由框架ARouter和ActivityRouter。


一.ARouter的配置介绍

大家有听说过大名鼎鼎的ARouter路由框架,这是有阿里出品的开源路由框架。今天配置了一下,感觉真的不少坑。

这里我以我的组件化Gank工程给大家演示一下,觉得有用欢迎给个star

(1)首先我们需要在base module里面添加一些配置

compile引用aouter-api库,

annotationProcessor是AOP注解需要的

然后annotaitonProcessor会使用javaCompileOptions这个配置来获取当前module的名字

这里还比较奇异的地方时,其他使用了ARouter的路由跳转的module(只要声明了Route注解的module)都需要配置红框的两个地方,不然会无法跳转成功。

当然我们还需要将加Application初始化

这里通过BuildConfig来区分打Log的情况,还需要使用ARouter.init()初始化

然后以web模块为例

我们的WebActivity需要添加注解Route,path是跳转的路径

然后通过ARouter的引用调用,build填的是地址,withXXX填的是参数的key和value,然后navigation就是发射了路由跳转了。

这里用的是建造者模式。

然后webActivity通过读取传递的intent的方式就可以获取参数了。

以为这样就完了,这里是我收集到ARouter踩到的坑,这里才是精华。

(1)请一定要保证每个需要跳转的module都需要加入,不然跨模块跳转不起来

会报出这样的log

(2)这里ARouter是对v4包是有依赖的,而且其包必定是要在25.2.0以上(我当前看的源码是需要这个,以后是否有更改,就需要大家查询了),这里需要感谢讨论群里的“98度”同学的提醒

(3)接下来,才是巨坑,这里面多个相同的group出现,就会提示出现

查了一下Route里面的代码,发现有以下这么一行,说明他是以group划分了,group名不应该相同。

这里group名就是path = “/XXX/XX“里面的第一个XXX了,每个module的group名都不应该相同。

如果遇到什么坑,也可以在评论或者加我讨论群告诉一下大家。

****2017.5.19****

发现了在Window电脑中编译无问题,在mac中编译就跳转不过过去。

遇到了一些大坑,因为Mac在Application中使用了BuildConfig结果无法正常调用。

只要注释了这里就能正常通过。。。

****2017.7.20****

感谢QQ群内的浇草少年发现的ARouter使用问题,

当使用retrolambda需要引用plugin,这样的顺序是有问题的。

需要调整一下retrolamda的顺序。很可能两个都从写了apt里面的方式,有什么潜在问题,之后有待考究。但是浇草少年暂时未遇到问题。


一.ActivityRouter的配置介绍

首先ActivityRouter比ARouter要先发布很多。但是配置比起ARouter要麻烦很多,显得相当不友好。

其配置方式有两种。

第一种方式是和ARouter一样,都是每个Module里面都要配annotaionProcessor

使用apt方式,你可能遇到以下的错误,RouterMapping一直找不到相应的对象。

然后每个Module中的需要路由跳转的Activity都需要配置这个scheme

每个Module都需要配一个空的引用类和Module注解

其Application需要配置Modules注解,包含注册的module对应的字符串

然后在对应的需要路由跳转的Activity跳转地址

简单的跳转调用Routers.open方法,调用scheme:data + module activity对应跳转地址

这样就能跳转成功了。

至于踩到什么坑

(1)申明地址的时候,地址开头不能带有“ /”,因为跳转的时候声明scheme data里面其跳转地址如果加上“/”开头,将会带有多/(如cangwang:///main),为了规避解析异常。

(2)跳转参数有两种方式,可以看ActivityRouter的例子里面,一种是通过地址包含参数

另一种是通过声明参数的类型来做

这里比较坑的地方时,如果需要带参数,需要以“?”+参数名+“=”+参数值  的方式传递

下面是例子

第一种方式

这里第一个值desc直接传递到title这个key里面

第二种方式传递

其参数名只需要写到对应的xxxParams里面。

跳转启动

(3)如果你考虑传递网址或者文件目录这些参数,你是无法使用第一种方式传递的,只能选择第二种方式。

因为其无法通过第一种方式解析出跳转的地址。

通过第二种方式传递,其能通过=来匹配传递内容。

而跳转失败是不会有log提示的,只能调试其源码才能看出来,排查过程真心有点累。


对比来看ActivityRouter配置灵活性比不上ARouter,ARouter参数传递更加简便。如果选型来说,还是选择后者。

我会在之后的章节给大家剖析ARouter的原理。

如果有不同的看法和建议,也可以留言给我,或者加我群,大家一起讨论。


总结

使用路由的初衷是因为考虑到以后网络跳转到原生页面,需要更好的解耦方式,也防止AndroidMainfest管理复杂化问题。

考虑踩过的坑,还是发现有一些缺陷的地方。

1.无法像Android使用startActivies启动多个intent

2.配置和侵入性,每个module都需要使用注解框架。

3.如果考虑到以后应用会sdk化,因为其包含注解框架,需要认真考虑是否值得使用路由框架。


这一节介绍就到这里,

下一节将会更精彩,敬请期待!!!

群号是316556016,也可以扫码进群。我在这里期待你们的加入!!!

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

推荐阅读更多精彩内容