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

[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)-组件化路由跳转相关推荐

  1. [Android]如何做一个崩溃率少于千分之三噶应用app(9)-Small插件化

    以下是我这个系列的相关文章,有兴趣可以参考一下,可以给个喜欢或者关注我的文章. [Android]如何做一个崩溃率少于千分之三噶应用app(1)-module工程架构 [Android]如何做一个崩溃 ...

  2. [Android]如何做一个崩溃率少于千分之三噶应用app(7)-跨module交互

    以下是我这个系列的相关文章,有兴趣可以参考一下,可以给个喜欢或者关注我的文章. [Android]如何做一个崩溃率少于千分之三噶应用app--章节列表 我也建立了一个关于Android架构学习的群,里 ...

  3. [Android]如何做一个崩溃率少于千分之三噶应用app(15)-View分发module架构

    以下是我这个系列的相关文章,有兴趣可以参考一下,可以给个喜欢或者关注我的文章. [Android]如何做一个崩溃率少于千分之三噶应用app--章节列表 这个系列的有关架构的概念,适合有大概 三年以上A ...

  4. [Android]如何做一个崩溃率少于千分之三噶应用app(19)-重新认识AndroidManifest

    大家好,我系苍王. 以下是我这个系列的相关文章,有兴趣可以参考一下,可以给个喜欢或者关注我的文章. [Android]如何做一个崩溃率少于千分之三噶应用app--章节列表 我们最开始开发需要了解的除了 ...

  5. [Android]如何做一个崩溃率少于千分之三噶应用app(17)-组件化SDK

    以下是我这个系列的相关文章,有兴趣可以参考一下,可以给个喜欢或者关注我的文章. [Android]如何做一个崩溃率少于千分之三噶应用app--章节列表 如果一开始关注我的同学,应该有看过这一篇技术[A ...

  6. [Android]如何做一个崩溃率少于千分之三噶应用app(31)-组件化网络请求

    Android组件化架构 以下是我这个系列的相关文章,有兴趣可以参考一下,可以给个喜欢或者关注我的文章. 相信很多人都会用过顶顶大名的Retrofit2框架,本篇就介绍组件化网络请求问题. 先说一下重 ...

  7. 用Android Studio做一个超好玩的拼图游戏,附送超详细注释的源码

    文章目录 一.项目概述 二.开发环境 三.需求分析 四.实现过程 1.拼图游戏布局绘制 2.拼图游戏时间计时 3.拼图游戏打乱显示 4.拼图游戏碎片位置切换 5.拼图游戏成功的条件 6.拼图游戏重新开 ...

  8. Android开发做一个简单的音乐播放器

    Android开发如何做一个简单的音乐播放器,首先我们先要知道用到的知识点有哪些. 1.MediaPlayer:可以播放本地资源.sd卡内存资源以及网络uri资源,在这里我们播放sd卡上的音乐资源. ...

  9. 语言做一个自动售货机软件_软件开发手机app系统软件高端定制做一个app软件要多少钱...

    软件开发手机app系统软件高端定制-做一个app软件要多少钱 APP开发分原生APP开发和在线制作,我们来看下这两种都需要多少费用吧. 1.原生APP开发(定制开发) 互联网是个神奇的大网,大数据开发 ...

最新文章

  1. python语言程序设计——深入学习python
  2. leetcode 752. 打开转盘锁 c代码
  3. OpenGL ES for Windows Mobile
  4. ASP.NET MVC下的四种验证编程方式[续篇]
  5. python读取与写入文件
  6. MH370 找到个毛!
  7. css设置table阴影浮动效果
  8. 在winform里怎么调用WebBrowser控件里的脚本 (转自思归呓语)
  9. Matlab R2019a Win64位 迅雷下载链接
  10. 深度学习入门(看了就会)
  11. 动态规划--背包计数--hdu2079选课时间
  12. 菜菜的sklearn课堂——决策树
  13. 数据结构 习题 第四章 串 (C语言描述)
  14. 《私募股权基金投资基础知识》---第八章
  15. 检测android 小米 系统更新,小米健康重磅更新!系统级心率检测功能来了
  16. #ifndef的详细意思
  17. 【阿里巴巴集团副总裁贾扬清——一个AI开发者的奇幻漂流】
  18. loglog matlab,MATLAB 函数loglog()
  19. vue3小兔鲜商城项目学习笔记+资料分享06
  20. iPhone开发教程之iOS APP体验设计 - 醒醒吧 ))))) - majszt - 和讯博客

热门文章

  1. C++对象池-多线程工厂模式
  2. 麻省理工研究发现,商业人工智能存在严重的性别和肤色歧视
  3. 【python--教程】python读写word文档
  4. 破壳问答 | 第一期
  5. Codeforces 676D Theseus and labyrinth 模拟+bfs
  6. LSM-Tree 的写放大写放大、读放大、空间放大RockDB、leveldb 写放大简单分析参考文档
  7. Java 数据对象(JDO)介绍
  8. 最有用的期货技术 — 无招胜有招
  9. C语言编程>第十一周 ⑤ 请编写一个函数,用来删除字符串中的所有空格。
  10. JavaScript IP MAC 验证