[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结果无法正常调用。
只要注释了这里就能正常通过。。。
一.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,也可以扫码进群。我在这里期待你们的加入!!!
[Android]如何做一个崩溃率少于千分之三噶应用app(22)-组件化路由跳转相关推荐
- [Android]如何做一个崩溃率少于千分之三噶应用app(9)-Small插件化
以下是我这个系列的相关文章,有兴趣可以参考一下,可以给个喜欢或者关注我的文章. [Android]如何做一个崩溃率少于千分之三噶应用app(1)-module工程架构 [Android]如何做一个崩溃 ...
- [Android]如何做一个崩溃率少于千分之三噶应用app(7)-跨module交互
以下是我这个系列的相关文章,有兴趣可以参考一下,可以给个喜欢或者关注我的文章. [Android]如何做一个崩溃率少于千分之三噶应用app--章节列表 我也建立了一个关于Android架构学习的群,里 ...
- [Android]如何做一个崩溃率少于千分之三噶应用app(15)-View分发module架构
以下是我这个系列的相关文章,有兴趣可以参考一下,可以给个喜欢或者关注我的文章. [Android]如何做一个崩溃率少于千分之三噶应用app--章节列表 这个系列的有关架构的概念,适合有大概 三年以上A ...
- [Android]如何做一个崩溃率少于千分之三噶应用app(19)-重新认识AndroidManifest
大家好,我系苍王. 以下是我这个系列的相关文章,有兴趣可以参考一下,可以给个喜欢或者关注我的文章. [Android]如何做一个崩溃率少于千分之三噶应用app--章节列表 我们最开始开发需要了解的除了 ...
- [Android]如何做一个崩溃率少于千分之三噶应用app(17)-组件化SDK
以下是我这个系列的相关文章,有兴趣可以参考一下,可以给个喜欢或者关注我的文章. [Android]如何做一个崩溃率少于千分之三噶应用app--章节列表 如果一开始关注我的同学,应该有看过这一篇技术[A ...
- [Android]如何做一个崩溃率少于千分之三噶应用app(31)-组件化网络请求
Android组件化架构 以下是我这个系列的相关文章,有兴趣可以参考一下,可以给个喜欢或者关注我的文章. 相信很多人都会用过顶顶大名的Retrofit2框架,本篇就介绍组件化网络请求问题. 先说一下重 ...
- 用Android Studio做一个超好玩的拼图游戏,附送超详细注释的源码
文章目录 一.项目概述 二.开发环境 三.需求分析 四.实现过程 1.拼图游戏布局绘制 2.拼图游戏时间计时 3.拼图游戏打乱显示 4.拼图游戏碎片位置切换 5.拼图游戏成功的条件 6.拼图游戏重新开 ...
- Android开发做一个简单的音乐播放器
Android开发如何做一个简单的音乐播放器,首先我们先要知道用到的知识点有哪些. 1.MediaPlayer:可以播放本地资源.sd卡内存资源以及网络uri资源,在这里我们播放sd卡上的音乐资源. ...
- 语言做一个自动售货机软件_软件开发手机app系统软件高端定制做一个app软件要多少钱...
软件开发手机app系统软件高端定制-做一个app软件要多少钱 APP开发分原生APP开发和在线制作,我们来看下这两种都需要多少费用吧. 1.原生APP开发(定制开发) 互联网是个神奇的大网,大数据开发 ...
最新文章
- python语言程序设计——深入学习python
- leetcode 752. 打开转盘锁 c代码
- OpenGL ES for Windows Mobile
- ASP.NET MVC下的四种验证编程方式[续篇]
- python读取与写入文件
- MH370 找到个毛!
- css设置table阴影浮动效果
- 在winform里怎么调用WebBrowser控件里的脚本 (转自思归呓语)
- Matlab R2019a Win64位 迅雷下载链接
- 深度学习入门(看了就会)
- 动态规划--背包计数--hdu2079选课时间
- 菜菜的sklearn课堂——决策树
- 数据结构 习题 第四章 串 (C语言描述)
- 《私募股权基金投资基础知识》---第八章
- 检测android 小米 系统更新,小米健康重磅更新!系统级心率检测功能来了
- #ifndef的详细意思
- 【阿里巴巴集团副总裁贾扬清——一个AI开发者的奇幻漂流】
- loglog matlab,MATLAB 函数loglog()
- vue3小兔鲜商城项目学习笔记+资料分享06
- iPhone开发教程之iOS APP体验设计 - 醒醒吧 ))))) - majszt - 和讯博客