ARoute路径说明

前言

学习了ARouter的使用,以及Activity的跳转流程,今天来学习下关于路径与自动生成的文件等对应关系。
关于用到的注解@Router 、@Interceptor、@Autowired下次再学。先把整个对应关系看到了,再学习会觉得形象些。

Route关系说明

Route主要有两个属性,path和group。如:@Route(path = “/app/ListPage”, group = “”)

第一个参数path是路径,group是分组
如上参数group为空,会默认使用path中解析;规则为第一个以‘/’分割的单词。如上格式,最终自动生成的路由表中就是这样的(路由表其实就是通过编译注解将path group class等信息生成map形式的代码,文件也是新生成)。
如下所示:

public class ARouter$$Group$$app implements IRouteGroup {
  @Override
  public void loadInto(Map<String, RouteMeta> atlas) {
    atlas.put("/app/ListPage", RouteMeta.build(RouteType.ACTIVITY, ListActivity.class, "/app/listpage", "app", new java.util.HashMap<String, Integer>(){{put("name", 8); }}, -1, -2147483648));
    atlas.put("/app/main", RouteMeta.build(RouteType.ACTIVITY, ArouterMainActivity.class, "/app/main", "app", null, -1, -2147483648));
  }
}

Map<String, RouteMeta> atlas:string为path名称,RouteMeta为类型、class、路径、分组等信息。
如上,/app/main所属组就是app。
综上,一个@Route(path = “/app/ListPage”, group = “”)路径,会被解释为一个文件:ARouter$$Group$$app。( 规则是:ARouter$$Group$$组名)。
文件路径为:generated\source\apt\debug\com\alibaba\android\arouter\routes\ARouter$$Group$$app.java

如增加一个路径:
@Route(path = “/main/dialogrouteservice”)/,此时会生成文件ARouter$$Group$$main.java如下:

public class ARouter$$Group$$main implements IRouteGroup {
  @Override
  public void loadInto(Map<String, RouteMeta> atlas) {
    atlas.put("/main/dialogrouteservice", RouteMeta.build(RouteType.PROVIDER, DialogRouteService.class, "/main/dialogrouteservice", "main", null, -1, -2147483648));
  }
}

Interceptor关系说明

作用:设置全局跳转的拦截器,可以设置优先级。@Interceptor(priority = 1)priority 为优先级。

@Interceptor(priority = 1)
public class ListInterceptor implements IInterceptor {
    @Override
    public void process(Postcard postcard, InterceptorCallback callback) {
        Log.i("ListInterceptor", "process in." + Thread.currentThread().getName());
    }

    @Override
    public void init(Context context) {
        Log.i("ListInterceptor", "init in." + Thread.currentThread().getName());

    }
}

处理注解基本和和@Route一样的。会根据路径,在注解处理时候生成文件:

public class ARouter$$Interceptors$$app implements IInterceptorGroup {
  @Override
  public void loadInto(Map<Integer, Class<? extends IInterceptor>> interceptors) {
    interceptors.put(1, ListInterceptor.class);
    interceptors.put(7, TopInterceptor.class);
  }
}

Map<Integer, Class<? extends IInterceptor>> interceptors:其中key为优先级值,class为对应的拦截器类。
map是个特别的map,根据key的值自动排序,如果key重复会异常,也是这个拦截器可以按优先级排序的原因。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值