相关基础可查阅
Android路由跳转-基础
-
ARouter框架图
-
APT注解
编译时使用APT技术处理@Router/@Interceptor/@Autowire三个注解
-
Activity跳转流程
1.首先调用LogisticsCenter.completion完成postcard的补充。
2.然后如果有回调函数就进行回调。
3.如果需要拦截,就进行拦截器的处理,否则就调用_navigation方法。
所有的Url/Intent跳转信息都使用Postcard邮戳进行信息封装。
Warehouse
存储跳转Path所对应的activity/fragment/url/provider,通过APT解析出来的映射关系存储在Warehouse中。LogisticsCenter
负责解析注解并构造Postcard。以懒加载的方式从Warehouse中获取信息,包括class/url/extras/params等跳转信息。构造Postcard的信息储存对象为HashMap形式的RouteMeta。_ARouter
负责根据Postcard进行页面跳转。Native采用startActivity形式。
- 处理 H5/Fragment/IProvider服务等其它类型
处理H5跳转时,通过注册一个没有UI的界面来统一处理scheme是arouter的跳转请求。在清单文件中声明一个activity,这个activity不需要页面,通过intent-filter隐式跳转用来统一获取url请求,然后再交给路由框架进行跳转。
ARouter发现服务有两种方式,ByName通过传递Path路径来发现,ByType通过服务class来查找。
IProvider和Fragment都是先反射构造实例再进行跳转,Activity为直接通过PATH跳转。
-
依赖注入
@AutoWired依赖注入字段的实现
拦截器
拦截器的拦截过程就是在线程池中从仓库里依次取出拦截器实例进行拦截。
拦截器的初始化过程是在线程池中进行,为了是拦截器可能耗时的问题。拦截器可设置超时时间,通过CountLatchDown同步计数类来控制多个拦截器的执行超时。降级策略
当跳转目标路径找不到等原因导致跳转失败时,可采用单独或全局的降级方式,比如通过加载H5处理错误情况等。
ARouter提供的降级策略主要有两种方式,一种是通过回调的方式;一种是提供服务接口的方式。
1.通过NavCallback接口的onLost方法,当没找到目的页面时进行单独降级。
2.通过 DegradeService服务接口的onLost方法进行全局降级。
protected Object navigation(final Context context, final Postcard postcard, final int requestCode, final NavigationCallback callback) {
try {
LogisticsCenter.completion(postcard);
} catch (NoRouteFoundException ex) {
if (null != callback) {
callback.onLost(postcard);
} else { // No callback for this invoke, then we use the global degrade service.
DegradeService degradeService = ARouter.getInstance().navigation(DegradeService.class);
if (null != degradeService) {
degradeService.onLost(context, postcard);
}
}
return null;
}
}