1. 注册获取项目中的注解类和字段
函数分析
2. 注册的内容有哪些?
(1) IRouteRoot、 (2) IProviderGroup 、(3) IInterceptorGroup
3. LogisticsCenter的init()方法做了什么
ClassUtils.getFileNameByPackageName(mContext,ROUTE_ROOT_PACKAGE);
根据包名读取对应的文件路径并且存储在Set<String> routerMap中
通过sp的技术存储在本地,下次初始化时会从缓存中读取,同时会记录一个版本号,
当版本号更新时,会重新调用ClassUtils.getFileNameByPackageName()读取文件路径
之后,遍历这个routerMap,根据文件的后缀名,“groupsIndex”, "interceptorsIndex", "providersIndex"分别装载进对应的容器IRouteRoot、IInterceptorGroup、IIProviderGroup。
4. LogisticsCenter的completion方法
Completion the postcard by route metas
RouteMeta routeMeta = Warehouse.routes.get(postcard.getPath());
5. ARouter里有哪些服务?
1 . AutowiredService, 2. ClassLoaderService, 3. DegradeService, 4. InterceptorService,
5. PathReplaceService 6. PrretreatmentService 7. SerializationService
public interface AutowiredService extends IProvider {
void autowire(Object instance);
}
public interface ClassLoaderService extends IProvider {
Class<?> forName();
}
public interface InterceptorService extends IProvider {
void doInterceptions(Postcard postcard, InterceptorCallback callback);
}
6 ARouter的核心数据结构
RouterMeta
RouteType type; 路由类型,标识跳转到哪些类型、获取哪些服务对象、或者方法
RouteType: 路由类型
ACTIVITY、SERVICE、PROVIDER、CONTENT_PROVIDER、BROADCAST、
METHOD、FRAGMENT、UNKNOWN。
7、doInject() 递归注入
8 、ARouter的数据层次关系
第一层 IRouteRoot : Map<String, Class<? extends IRouteGroup>> routes
第二层 IRouteGroup : Map<String, RouteMeta> atlas
第三层RouteMeta : RouteType type 、 Class<?> destination 、Map<String, Integer> paramsType。
String group、String path。