@Router生成文件
1.ARouterGrouplogin:组文件
2.ARouterProviderlogin:参数传递
3.ARouterRootlogin:找到group
将信息封装到RouteMeta中,来进行跳转
ARouter(对外暴露的调用类)中init方法
1.对_ARouter(路由控制器,实际实现的类)进行初始化init,LogisticsCenter注册中心进行init
如果是新版本或者debug模式,则从apt生成的保存获取类,如果为空:通过SharedPreferences获取缓存指定包下的所有class文件,这样减少每次读取时间,存放在routemap中,判断所有类类型。使用反射实例化对象(生成类的类名集合)
拿到所有生成类名的集合后,通过反射实例化对象并调用方法,将注解的一些元素添加到static集合groupIndex中:
Warehouse:存放routemeta和其他信息,其中groupIndex是缓存获取根部组名
通过root直接put到对应分组上,然后直接使用group中的方法加载的方法获取分组的对应位置
如果不同的module中存在相同的分组(即路径的第一段,如上面的“test”),则会在对应的module中生成不同的IRouteGroup的实现,然后在此处会执行分别执行routes.put("test", ARouter$$Group$$moduleA.class);,以及routes.put("test", ARouter$$Group$$moduleB.class);,但是因为key相同,因此前一个会被覆盖,导致前一个定义的路由无法找到。官方的建议是路径分组与模块名相同,并且不同模块不要使用相同的分组。