Skip to content

添加路由拦截器

Haoge edited this page Sep 14, 2017 · 13 revisions

示例:使用拦截器实现登录拦截

作用

拦截器用于在进行路由启动时。让用于灵活的配置规则。判断是否对此次的路由事件进行拦截。若拦截。则此次路由事件失效。

触发时机

在使用路由进行启动时,当所使用的url匹配到对应的路由规则时。将会触发设置的拦截器。当拦截器全部通过时。路由启动成功

分类

路由拦截器依据使用场景来分。可以分为三类:

  1. 全局默认拦截器:
    • 设置方式:
      • RouterConfiguration.get().setInterceptor(interceptor);
    • 作用域:
      • 此全局默认拦截器。将会被所有启动的路由事件所触发。
  2. 针对某次路由所特别设置的拦截器
    • 设置方式:
      • Router.create(url).getBaseRoute().addInterceptor(interceptor);
    • 作用域:
      • 只被此处所创建的路由触发。
    • 其他:
      • 此处所设置的拦截器可以为多个。需要注意的是,当在此配置的拦截器,若在其触发前即被拦截后。若此拦截器没有被实现序列化接口。在后续恢复路由时,可能会丢失。
  3. 针对某个目标路由所特别设置的拦截器
    • 设置方式:
      • 在目标路由配置类上。添加@RouteInterceptor()注解。将需要配置的注解Class加入。
    • 作用域:
      • 当路由url所匹配的目标路由为此路由时被触发
    • 其他:
      • 此处所设置的拦截器可以为多个

此三种拦截器,触发的优先顺序为:全局默认 > 某次路由 > 某个目标路由,且若当途中已某个拦截器拦截了。则将不会继续触发到后续拦截器中

拦截器接口说明:

拦截器接口 RouteInterceptor 包括两个方法:

  1. boolean intercept (Uri uri, RouteBundleExtras extras, Context context):

    在此进行判断是否对此次路由事件进行拦截,返回true代表拦截

  2. void onIntercepted(Uri uri, RouteBundleExtras extras, Context context):

    当路由事件被此拦截器所拦截时,被通知到此。可在此进行拦截后的操作。比如登录检查拦截后。跳转登录页面,可将uri与extras进行保存。便于在拦截处理操作完成之后。通过Router.resume(uri, extras)方法进行恢复路由启动。