好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

开源最佳实践:Android平台页面路由框架ARouter.doc

25页
  • 卖家[上传人]:gg****m
  • 文档编号:207269637
  • 上传时间:2021-11-03
  • 文档格式:DOC
  • 文档大小:201.50KB
  • / 25 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 开源最佳实践:Android平台页面路由框架ARouter本文章来自于阿里云云栖社区为了更好地让开发者们更加深入了解阿里开源,阿里云云栖社区在3月1号了举办“阿里幵源项目最佳实践”技术峰会,直播讲述了当前阿里新兴和经典开源项冃实战经验以及背后的幵发思路,在本次技术峰会上,阿里云资深开发工程师刘志龙分享了 Android平台页面路由框架ARouter的技术方案、解决的问题以及在实际场景中的最佳实践为了更好地让开发者们更加深入了解阿里开源,阿里云云栖社区在3月1号了举办“阿里开源项冃最佳实践”技术峰会,直播讲述了当前阿里新兴和经典开源项目实战经验以及背后的开发思路在本次技术峰会上,阿里云资深开发工程师刘志龙分享了 Android平台页面路由框架ARouter的技术方案、解决的问题以及在实际场景中的最佳实践演讲嘉宾介绍:刘志龙(花名正纬),阿里云资深开发工程师,主要从事Android端应用开发,负责阿里云APP的Android端架构设计、中间件开发;阿里云APP服务于阿里云官网用户,用户可以便捷的在移动端管控云上资源,了解云栖社区资讯等本次分享将主要围绕以下几个方面:一、为什么需耍路由框架、ARouter的技术方案三、使用ARouter的最佳实践四、未来开发计划一、为什么需要路由框架原生的路由方案存在的问题首先谈一谈原生的路由方案存在的问题以及为什么需要路由框架。

      我们所使用的原生路由方案一般是通过显式intent和隐式intent两种方式实现的,而在显式intent的情况下,因为会存在直接的类依赖的问题,导致耦合非常严重;而在隐式intent情况下,则会出现规则集中式管理,导致协作变得非常困难而且一般而言配置规则都是在Manifest中的,这就导致了扩展性较差除此之外,使用原生的路由方案会出现跳转过程无法控 制的问题,因为一旦使用了 StartActivity()就无法插手其中任何环节了,只能交给系统管理,这就导致了在跳转失败的情况下无法降级,而是会直接抛出运营级的异常这时候如果考虑使用自定义的路由组件就可以解决以上的一些问题,比如通过URL索引就可以解决类依赖的问题;通过分布式管理页面配置可以解决隐式intent中集中式管理Path的问题;自己实现整个路由过程也可以拥有良好的扩展性,还可以通过AOP的方式解决跳转过程无法控制的问题,与此同时也能够提供非常灵活的降级方式为什么要用路由组件前面提到的主要是开发与协作中的问题,而使用一款路由框架时还会涉及到其他的两个大方面:一方面是组件化,而另一方面就是Native和H5的问题刚才所提到的主要是幵发和协作中作为开发者所需要面对的问题,而一旦一款APP达到一定体量的时候,业务就会膨胀得比较严重,而开发团队的规模也会越来越大,这时候一般都会提出组件化的概念。

      组件化就是将APP按照一定的功能和业务拆分成多个小组件,不同的组件由不同的开发小组来负责,这样就可以解决大型APP开发过程中的开发与协作的问题,将这些问题分散到小的APP中目前而言组件化已经有非常多比较成熟的方案了,而自定义路由框架也可以非常好地解决整个APP完成组件化之后模块之间没有耦合的问题,因为没有耦合时使用原生的路由方案肯定是不可以的另外一个问题就是Native与H5的问题,因为现在的APP很少是纯Native的,也很少会有纯H5的,一般情况下都是将两者进行结合这时候就需耍非常便捷并且统一的跳转方案,因为在H5中是无法使用StartActivity()跳转到Native页面的,而从Native跳转到H5页面也只能通过配置浏览器的方式实现路由框架的特点为了解决以上的问题就需要实现一个自定义的路由框架,而路由框架一般都具有以不的三种特点:1. 分发:把一个URL或者请求按照一定的规则分配给一个服务或者贞面来处理,这个流程就是分发,分发是路由框架最基本的功能,当然也可以理解成为简单的跳转2. 管理:将组件和页面按照一定的规则管理起来,在分发的时候提供搜索、加载、修改等操作,这部分就是管理,也是路由框架的基础,上层功能都是建立在管理之上。

      3. 控制:就像路由器一样,路由的过程中,会有限速、屏蔽等一些控制操作,路由框架也需要在路由的过程中,对路由操作做一些定制性的扩展,比方刚才提到的AOP,后期的功能更新,也是围绕这个部分来做的今天分享的主题是ARouter, ARouter是阿里巴巴开源的Android平台中对页面、服务提供路由功能的中间件,提倡的是简单且够用ARouter的7个优势ARouter大致有以下7个优势:聲?优势一:直接解析URL路由,解析参数并赋值到对应冃标字段的页面中优势二:支持多模块项目,因为现在很少有APP是单模块的项目,一般都是多模块单工程的,由不同的团队负责不同的模块开发,这时候支持多模块项目开发就显得尤为重要优势三:支持InstantRun,0前很多路由框架并不支持InstantRun,而InstantRun是Google在AndroidStudio2.0阿尔法版本中提供的新功能,其类似于代码的日更新,其只不过面向的是开发过程,这样做可以在幵发的过程中减少开发和编译的次数,可以简单地将代码修改即时地同步到APK中,从而可以大规模降低开发复杂度优势四:允许自定义拦截器,ARouter是支持拦截器的,而拦截器其实就是AOP的实现,可以自定义多个拦截器解决一些面向行为编程上出 现的问题。

      优势五:ARouter可以提供loC容器,loC其实就是控制反转, 这一部分做过服务端开发的朋友可能比较了解,因为服务端开发经常用到 的Spring框架能够提供的一个非常重要的能力就是控制反转优势六:映射关系自动注册,在贞妞不是很多的小型APP上面,自动注册并不会体现出太大优势,但是对于大型APP而言,可能页面数量已经达到的几十个或者数百个,在这样的情况下,自动注册就显得非常重要了,因为不可能将每一个页面都通过代码的方式进行注册优势七:灵活的降级策略,ARouter可以提供很多种降级策略供用 户自行选择,而原生的路由力*案存在无法灵活降级的问题,StartActivity()一旦失败将会抛出运营级异常二、ARouter的技术方案接下来进入分享的第二部分:ARouter的技术方案其实如果大家看过ARouter的源码就会知道ARouter提供了两个SDK,分别是血向两个不 同的阶段本身API这个SDK是面向运行期的,而Compiler这个SDK则是 作用于编译期的,从工程上ARouter就是划分成了这两个SDK最基础的就是Compiler这个SDK,其内部有三个处理器,分别是:Route Processor, Interceptor Processor 以及 Autowire Processor,通过名字就可以看出这三个处理器分别是处理路径路由、拦截器和进行自动装配的。

      而API的SDK是用户在运行期使用的,这一部分主要分为四层最上层是Launcher层,这一层是开发者可以直接用到的,其实所有的API都是在这一层中在 Launcher层的下一层就是Frossard层,从上图中可以看到Frossard层也是绿色的,表示这一层也是可以被外部调用的,Frossard层其实包含了三部分,分别是:Service、Callback和Template,这里的Service概念和服务端的Service概念是相似的,也是在客户端的简单引中,但是却不同于Android组件中的Service,这里的Service是ARouter抽象出来的概念,从本质上讲,这里的Service是接口,从意义上讲是将一定的功能和组件封装成接口,并 对外提供能力Template则是模板,主要用于在编译期执行的SDK,这个 SDK会在编译期生成一些映射文件,而这些映射文件会按照Template组件中提供的模板来生成,这样按照一定的规则和约朿生成映射文件也方便Route在运行的时候进行读取再往下一层就完全是SDK的内部实现了, 这一层包括了 Ware House、Thread、Log、Exception 以及 Class 工具。

      WareHouse主要存储了 ARouter在运行期间加载的一些配置文件以及映射关系;而Thread则是提供了线程池,因为存在多个拦截器的时候以及跳转过程中都是需要异步执行的;Class工具则是用于解决不同类型APK的兼容问题的 再下一层就是Logistics Center,从名字上翻译就是物流中心,整个SDK的流转以及内部调用最终都会下沉到这一层,当然也会按照功能模块进行划分下图是按照功能组件的方式来对于整个框架进行划分的,其实 ARouter 在设计上使用 了三种思想:Bootstrapping、Extensibility 以及 Simple & Enough首先,ARouter的组件是自举的,这个概念借鉴了编程中 的白举;除此之外ARouter组件还具有良好的扩展性,因为像Route这样的东西是整个APK的基础组件,不可能经常变更,也不可能经常升级,所 以应该具有良好的扩展性,而不需要通过经常升级来解决问题;而ARouter 最重要的宗旨就是简单并且够用,ARouter不会有非常复杂的使用方式和调用方式,但是功能却是非常全面的可以从图中看出ARouter的最外曲*一层就是Route,这一层是整个框架的基础,而这一层也应该非常稳定,几乎不会发生变更。

      再往上一层就是Service层,这一层是依赖于底层的Route构建起来的,也就是说Service 层是通过Route才实现的功能再往上一层就是Interceptor层,拦截器层 则是通过Service的机制实现的,拦截器和Service都会作用于整个路由的过程中,所以说组件之间是自举的,因为Service和Interceptor在没有Route时是不会出现的,它们都是由Route层构建起来的,反过来又会作用于Route层,这也是ARouter的可扩展性的表现,后续的扩展都会基于Service层来实现接下来分享一下ARouter的具体解决方案,也就是ARouter是如何解决上述问题的页面注册:注解&注解处理器首先,对于页面自动注册的问题,ARouter是可以自动注册映射关系的,因为大型APP的页谢往往很多,会存在几十甚至上百个页谢,所以手动注册映射关系会非常麻烦,需要写很多重复冗余的代码,并且需要调用很多接口,而为了避免这样的麻烦,ARouter实现了页面的自动注册而为了解决隐式intent的问题和将所有配置都存储在Manifest中这样集中式的问题,首先想到的就是分布式管理,可以将所有的配置都放在目标页面,这样就实 现了 “All In One”,就是一个页面中所有的配置都要聚合在该页面中,这样就解决上面的问题。

      不同的页面由不同的配置负责,这样修改也变得非常容易,而不需要将配置散落在整个APP四处其实配置相当于一个注解,所以ARouter采用的方案就是在每个目标页面上使用注解来标注一些参数,比方上图中的Path标注就是其路径,图中也可以看到对于注解的声明使用注解时会遇到的第一个问题就是需要找到处理注解注解的时机,如果在运行期处理注解则会人量地运用反射,而这在软件开发中是非常不合适的,因为反射本身就存在性能问题,如果大量地使用反射。

      点击阅读更多内容
      猜您喜欢
      开展综合模式提升学生音乐素质培养成效.doc (高教版)中职语文基础上册《写作:应用文 便条》word教案.doc (语文版)中职语文(职业模块 工科通用)《摇滚情缘》word教案.doc (语文版)中职语文(职业模块 服务类)《论逆境》word教案.doc 【精华】2021年班主任评语汇总75句.docx (语文版)中职语文(基础模块)上册第21课《雨霖铃》word教案.doc (语文版)中职语文(拓展模块)《荷花淀》word教案.doc 【精华】2021年唯美简短句子45句.docx (语文版)中职语文(拓展模块)《孔雀东南飞》word教案.doc (高教版)中职语文基础上册《专业-助我点燃信念的灯》word教案.doc (语文版)中职语文(职业模块 服务类)《生命的追问》word教案.doc (高教版)中职语文基础上册《荷花淀》word教案.doc (语文版)中职语文(职业模块 服务类)《我爱喝稀粥》word教案.doc 2021年华师大版数学八年级上册14.1《勾股定理》同步练习卷(含答案).doc (高教版)中职语文基础上册《我的母亲》word教案.doc (高教版)中职语文(职业模块 工科类)《依奇克里克》word教案.doc (语文版)中职语文(职业模块 服务类)《十八岁和其他》word教案.doc 开放知识库构建技术的多维量化评价方法.doc 开展查处取缔无照经营活动方案.doc (高教版)中职语文(基础模块)下册口语交际《介绍工艺流程》word教案.doc
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.