相关基础可查阅
Android路由跳转-基础

  1. ARouter框架图


    框架图
  2. APT注解
    编译时使用APT技术处理@Router/@Interceptor/@Autowire三个注解


    流程图
  1. 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形式。

  1. 处理 H5/Fragment/IProvider服务等其它类型
    处理H5跳转时,通过注册一个没有UI的界面来统一处理scheme是arouter的跳转请求。在清单文件中声明一个activity,这个activity不需要页面,通过intent-filter隐式跳转用来统一获取url请求,然后再交给路由框架进行跳转。

ARouter发现服务有两种方式,ByName通过传递Path路径来发现,ByType通过服务class来查找。

IProvider和Fragment都是先反射构造实例再进行跳转,Activity为直接通过PATH跳转。

  1. 依赖注入
    @AutoWired依赖注入字段的实现


  2. 拦截器
    拦截器的拦截过程就是在线程池中从仓库里依次取出拦截器实例进行拦截。
    拦截器的初始化过程是在线程池中进行,为了是拦截器可能耗时的问题。拦截器可设置超时时间,通过CountLatchDown同步计数类来控制多个拦截器的执行超时。

  3. 降级策略
    当跳转目标路径找不到等原因导致跳转失败时,可采用单独或全局的降级方式,比如通过加载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;        }}

参考

更多相关文章

  1. 一行代码实现Android右滑返回
  2. android Cursor的自动管理方式
  3. Android(安卓)退出activity 的方式总结
  4. Android(安卓)动态移动控件实现
  5. Android(安卓)创建与解析XML(四)—— Pull方式
  6. 预习数据存储5种方式
  7. Android(安卓)找控件的五种方式,解放你的双手!
  8. FileProvider在Android(安卓)N上的应用
  9. Android(安卓)jetpack的Paging和Room结合使用

随机推荐

  1. 我的Android(安卓)NDK之旅(四),android串口
  2. Android中以JAR形式封装控件 或者类库
  3. 很容易理解的Android消息机制分析
  4. Android的程序解码与XML文件解码
  5. 【Android】OkHttp源码分析
  6. Android(安卓)Studio学习之安装插件
  7. Android(安卓)SharedPreferences详解
  8. Android屏幕相关设置
  9. VS2019 C++的跨平台开发——Android(安卓
  10. Android(安卓)开发环境配置 之后(释放你的