当前位置: 首页 > 工具软件 > ARouter > 使用案例 >

ARouter的分析

葛书
2023-12-01

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。 

     
      

     

 类似资料: