-
Notifications
You must be signed in to change notification settings - Fork 86
添加路由拦截器
Haoge edited this page Sep 14, 2017
·
13 revisions
拦截器用于在进行路由启动时。让用于灵活的配置规则。判断是否对此次的路由事件进行拦截。若拦截。则此次路由事件失效。
在使用路由进行启动时,当所使用的url匹配到对应的路由规则时。将会触发设置的拦截器。当拦截器全部通过时。路由启动成功
路由拦截器依据使用场景来分。可以分为三类:
-
全局默认拦截器:
- 设置方式:
- RouterConfiguration.get().setInterceptor(interceptor);
- 作用域:
- 此全局默认拦截器。将会被所有启动的路由事件所触发。
- 设置方式:
- 针对某次路由所特别设置的拦截器
- 设置方式:
- Router.create(url).getBaseRoute().addInterceptor(interceptor);
- 作用域:
- 只被此处所创建的路由触发。
- 其他:
- 此处所设置的拦截器可以为多个。需要注意的是,当在此配置的拦截器,若在其触发前即被拦截后。若此拦截器没有被实现序列化接口。在后续恢复路由时,可能会丢失。
- 设置方式:
- 针对某个目标路由所特别设置的拦截器
- 设置方式:
- 在目标路由配置类上。添加@RouteInterceptor()注解。将需要配置的注解Class加入。
- 作用域:
- 当路由url所匹配的目标路由为此路由时被触发
- 其他:
- 此处所设置的拦截器可以为多个
- 设置方式:
此三种拦截器,触发的优先顺序为:全局默认 > 某次路由 > 某个目标路由,且若当途中已某个拦截器拦截了。则将不会继续触发到后续拦截器中
拦截器接口 RouteInterceptor 包括两个方法:
-
boolean intercept (Uri uri, RouteBundleExtras extras, Context context):
在此进行判断是否对此次路由事件进行拦截,返回true代表拦截
-
void onIntercepted(Uri uri, RouteBundleExtras extras, Context context):
当路由事件被此拦截器所拦截时,被通知到此。可在此进行拦截后的操作。比如登录检查拦截后。跳转登录页面,可将uri与extras进行保存。便于在拦截处理操作完成之后。通过Router.resume(uri, extras)方法进行恢复路由启动。