前语

上一篇移动运用留传体系重构(8)- 依托注入篇
终究咱们通过IDE的依托剖析发现,App模块主界面直接依托了file Bundle的FileFragmeapprovent,存在直接的编译依托。

跨模块间applicationActivity或Fragment的直接依托是最常见的。可是假定有直接的依托,咱们就无法做到业务模块独立编github直播平台永久回家译调试,后续做动态化也没办法一起处理。本篇咱们首要分为3个部分,第一部分是路由的原理,第二部分是业界优异的路由结构实践,终究咱们将持续对CloudDisk中UI跳转进行重构。

路由原理

Android中常用的页面跳转便是通过直接的依托办法。

Intent intent = new Intent(MainAcgithub永久回家地址tivity.this, LoginActivity.class);
startActivity(intent);

但其实github敞开私库Intent还有另外一个API支撑运用类名进行隐式跳转。

Intent intent = new Intent();
intent.setClassName(this,"com.cloud.disk.platform.login.Logingit教程Activity");
startActivity(intent);

这种办法就不会存在编译的问题。但当整个运用内的页github直播平台永久回家面跳转量很大时,咱们就很难大局进行一起维护。而且android体系许多场景需求动态推送页面跳转,咱们需求一起处理一切页面的地址,这个时分咱们就需求有一起的计划进行路由处理。

那么怎样进行一起的处理呢?其实一个很天然的思路便是树立一个一起的映射,例如:

uri://user/login -> cAPPom.cloud.disk.platforandroid下载m.login.LoginActivity

然后通过一个一起的办法进行处理,这便是所谓的路由表。当运用进行跳转时,输入虚拟的地址,通过路由表进行查询得到实践的github中文官网网页地址,然后就可进行跳转。而且有了这一层转化,咱们就能够做许多扩展,例如降级、阻遏等等

下面就让咱们一同来看看一些业界git指令的优异实践。

业界优异实践

ARouter

ARouter首要选用的也是路由表的办法,具体的运用和approve原理,网上有许多资料。这儿首要列android体系出官网上介绍的一些首要的功用。

  • 支撑直接解析标准URLandroid是什么手机牌子进行跳转,并主动注入参数到政策页面中
  • 支撑多模块工程运用
  • 支撑增加多个阻遏器,自界说阻遏次第
  • 支撑依托注入,可独自作为依托注入结构运用
  • 映射联系按组分类开源节流、多级GitHubGit理,按需初始化

支撑用户指定大局降级与部分降级战略
页面、阻遏器android的drawable类、服务等组件均主动注册到开源我国结构
支撑多种办法装备转场动画

  • 支撑获取Fragment
  • 完全支撑Kotlin以及混编
  • 支撑gitlab第三方 App 加固(运用 arouter-registeapp安装下载r 完成主动注册)
  • 支撑生成路由文档
  • 供给 IDE 插件快捷的关联途径和政策类

更多具体的介绍和运用阐明android开发,能够参看Github上的介绍

这儿咱们从Github上的介绍发现,相同选用了注解和Gradle插件在编译时生成文件,但ARouter并没有像Hilt那样android下载安装有完善的查验套件支撑,github中文社区所以假定运用Robapplicationolectric在JVM上进行查验会有影响。

DeepLinkDispatch

DeepLinkDispatch是airbnb开源的一个路application由结构,原理也是选用路由表的办法。

供给声明性的、根据giti注释github中文社区的API来界说运用程序深度链接。
能够注册一个Activity来处理特定的深度链接,办法是运用@DeepLink和URI对其进行注释。DeepLinkDispatch将解析URI并开源软件将深度链接与Ugithub直播平台永久回家RI中指定的任何参数一同发送到恰当的Activity。

相比之下,功用没有ARouter强壮,且国内的社区活跃度没有ARouter高,具体的运用办法能够参看官方的介绍

CloudDisk路由重构示例

通过比照,咱们抉择运用功用相对强壮且社区活跃度高的ARouter,对CloudDisk进行改造。具体的完好代码示例Github。这儿咱们贴出前后代码运用的比较。

改造apple开源节流approach

fragments.add(FileFragment.newInstance());

改造后android下载安装

//声明
@Route(path = "/bundle/file开源")
public class FileFragment extends Fragment
//调用
fragments.add((Fragment) ARouter.getInstance().build("/bundle/file").navigation());

但当咱们作业冒烟查验的时分发现出现空异常,如下

移动使用留传体系重构(9)- 路由篇

ARouter的navigandroid开发ation并不能找到实例,上面咱们有提到ARouter相同选用了注解和Gradle插件在编译时生成文件,但ARout开源节流er并没有像Hgitiilt那样有完善的查验套件支撑,在JVM上进行查验会有影响。这儿咱们选用的计划是Shadow,开源节流是什么意思是什么将实践ARouter的跳转Mock掉。

@Implements(Postcard.class)
public class ShadowPostCard {
@ReaAndroidlObject
public Postcard postcard;
@Implementaapprovetion
public Object navigation() {
if ("/bundle/file".equals(postcard.getPath())) {
trgit指令y {
return Class.forName("com.cloud.disk.bundle.file.FileFragment").newInstance();
} catch (ClassNotFoundException | IllegalAccessgithub是干什么的Exception | InstantiationException e) {
e.printStackTrace();
}
}
re开源代码网站githubturn null;
}
}

移动使用留传体系重构(9)- 路由篇

咱们还能够考虑把查验用例放入androidTest,运用真机作业查验。但为了得到更快的反应速度,github打不开咱们抉择先沿袭shadow的计划。

总结

运用路由除了能解耦开编译时的依托,一起了路由地址也能更好的满足运用的跳转场景。现在CloudDisk已appear经解耦了lib和file bundle 2个模块,而且基础的approach注入和路由也已经有了,下一篇单体移动运用“模块化开源是什么意思”演进之旅(10)- 解耦重构演示篇(二)github中文社区咱们将持续共享对platform、user、dynamic进行依托革除重构,将会共享更多的实战解耦办法。

CloudDisk示例代码

CloudDisk

系列链接

移动运用留传体系重构(1)- 开篇

移动运用留传体系重构(2)-架构篇

移动运用留传体系重构(3)-示例篇

移动运用留传体系重构(4)-approve剖析篇

移动运用留传体系重开源节流构(5)- 重android下载安装构办法篇

移动运用留传体系重构(6)- 查验篇

移动运用留传体系重构(7)- 解耦重构演示篇(一)+视频演示

移动运用留传体系重构(8)- 依托注入篇

大纲

移动使用留传体系重构(9)- 路由篇

关于github永久回家地址

欢迎关注CAC活络教练公android体系众号。微开源是什么意思信查找:CAC活络教练

  • 作者:黄俊彬
  • 博客:junbin.tech
  • GitHub: junbin1011
  • 知乎: @JunBin