当前位置:网站首页>组件化学习(3)ARouter中的Path和Group注解
组件化学习(3)ARouter中的Path和Group注解
2022-04-23 06:07:00 【独饮敌敌畏丶】
这里就不对ARouter进行全面分析了,而是把Group和Path的思想抽象出来理解
1.介绍下Group和Path
在上一篇文章中也提到过,Group就是组,Path就是组里面具体的类。在ARouter的api模块中,有针对Group和Path的接口ARouterGroup和ARouterPath。如下(这里只是举个例子,并不一定真有同名接口,但是思想是一样的)
public interface ARouterGroup {
Map<String, Class<? extends ARouterPath>> getGroupMap();
}
ARouterGroup接口:
有一个Map集合,key,就是各个组名,比如app,common等等。value就是每个组名对应的详情类。其实就是实现了ARouterPath接口的类.ARouterPath接口:
public interface ARouterPath {
Map<String, RouterBean> getPathMap();
}
这里的key就是Path,value就是与Path相对应的,被RouterBean封装了的class对象。比如key是/app/MainActivity,value就是RouterBean<MainActivity.class>
RouterBean就是这样的,其中被框起来的就是Class对象。可以理解成对Class对象的封装
2.Path和Group的工作原理
注意: 先有Path的接口ARouterPath,再有Group的接口ARouterGroup,因为Group要遍历使用Path
说到这里,可能还是对ARouterGroup接口,ARouterPath接口不太熟悉。我在这里把具体实现的效果拿过来,就好理解多了
在具体实现的时候,即利用JavaPoet生成类文件的时候
①要首先生成,实现了ARouterPath接口的类。不同的group有不同的实现类。比如app组就对应一个ARouterPath的实现类,里面也有一个Map集合,key可以是app组里面所有的Path,value就是与Path对应的RouterBean。
②然后生成实现了ARouterGroup接口的类。这个类也是一个组对应一个,相当于一个模块对应一个路由表。key就是不同的组,value就是不同的组对应的ARouterPath的实现类。
假如目前只有两个业务模块,即order和personal,则
①生成的实现ARouterPath接口的类的具体代码实现如图所示
order模块生成的,里面的Map集合存储了order模块所有的path
personal模块生成的
②生成的实现ARouterGroup接口的类的具体代码实现如图所示
order板块生成的,里面存储了所有可能用到的模块对应的实现了ARouterPath的Class对象personal板块生成的
ARouterManager是全局的,是用来缓存ARouter$$Group和ARouter$$Path的
需要通信的时候,比如order模块要向personal模块通信,我认为就需要找全局的ARouterManager里面有没有缓存的ARouter$$Group$$personal,如果有,就直接利用缓存的ARouter$$Group$$personal,找到ARouter$$Path$$personal.class,然后再得到目标类的 RouterBean对象,即得到了目标类的class对象,进行通信,如果没有,就把编译后就生成的ARouter$$Group$$personal类和ARouter$$Path$$personal添加到ARouterManager里面(即懒加载),然后再完成跳转
代码描述就是这样:
ARouter$$Group$$personal.getGroupMap().get("personal").get("targetClass")
ARouter的参数传递,也是类似的思想,和ButterKnife也很像。就是在需要传递的参数定义上面加上注解,然后编译的时候生成特定的类的类文件,这个类文件的作用就是可以使用Bundle,给对应的类的这些参数赋值
我所理解的Path和Group原理就是这样。具体的生成这些类文件的JavaPoet代码,我还没有进行详细学习,等后面用到的时候再学习吧,现在先掌握思想。
版权声明
本文为[独饮敌敌畏丶]所创,转载请带上原文链接,感谢
https://blog.csdn.net/afdafvdaa/article/details/121672042
边栏推荐
- Thanos compact component test summary (processing historical data)
- Antd Design Form表单检验
- Relabel of Prometheus_ Configs and metric_ relabel_ Configs explanation and usage examples
- ACFS文件系统创建扩大缩小等配置步骤
- Abnormal record-22
- Dolphinscheduler源码包src.tar.gz解压问题
- How does VirtualBox modify the IP network segment assigned to the virtual machine in the "network address translation (NAT)" network mode
- ARGB透明度换算
- timestamp隐式转换问题导致索引列未使用问题分析
- Chaos vous emmène au projet chaos.
猜你喜欢

Prometheus cortex Architecture Overview (horizontally scalable, highly available, multi tenant, long-term storage)

基于ECS搭建云上博客(体验有礼)

Apache Atlas 编译及安装记录

Oracle redo log产生量大的查找思路与案例

实践使用PolarDB和ECS搭建门户网站

JVM basics you should know

ACFS文件系统创建扩大缩小等配置步骤

【机器学习】笔记 4、KNN+交叉验证

Dolphinscheduler配置Datax踩坑记录

useReducer基本用法
随机推荐
Abnormal record-18
中国各省会城市经纬度位置
Arranges the objects specified in the array in front of the array
RAC环境集群组件gpnp未启动成功问题分析
Android-Room数据库快速上手
实习做了啥
Relabel of Prometheus_ Configs and metric_ relabel_ Configs explanation and usage examples
补补网络缺口
19C RAC修改VIP及SCANIP步骤-同网段
个人博客网站搭建
oracle 修改默认临时表空间
oracle undo使用率高问题处理
Build a cloud blog based on ECS (send blessings on the cloud Xiaobao code and draw iphone13 for free)
oracle对表字段的修改
利用栈实现队列的出队入队
RAC环境中openssh版本对SSH互信创建的影响
oracle中生成32位uuid
B站用户视频观看记录的存储方案
Android面试计网面经大全【持续更新中。。。】
10g数据库使用大内存主机时不能启动的问题



