Android组件化通信与路由的关系

一 组件化通信的实现方式

阿里ARouter:

  1. base层定义路由表(抽象功能下沉);
  2. lib层实现某个path;
  3. 自定义注解:将所有实现类都以特殊的规则集合到某个包名下(实现类注册);
  4. 运行时通过init,将所有实现类加载;
  5. 懒加载创建实现类实例(懒加载);

精简逻辑:

  1. 抽象功能下沉到base;
  2. 实现类注册;
  3. 懒加载;

其中第二步“实现类注册”的实现方式花样比较多,除ARouter的“编译期罗列-运行时加载”,还可以写个Gradle-Plugin,在class转dex中间插一脚。总之这一步玩一些编译时注解会比较有意思。

Dagger2实现:

demo:Dagger2实现组件化通信

  1. 抽象功能下沉到base(抽象功能下沉);
  2. lib层实现抽象功能;
  3. lib层提供抽象功能与其实现的映射(dagger2中的Module);
  4. app层的Component(dagger2)集合所有lib层的Module(dagger2)(实现类注册);
  5. Lazy(dagger2)(懒加载);
    这种方式目前可以预料的缺点:跨三层的核心代码

由此可见,在组件化通信的实现方案中,路由并不是唯一方案。

二 为什么要用路由

  1. 假的理由:
    “避免显示Activity启动/引用的耦合”
    例如在ModuleA的代码中强行使用ModuleB中的Activity
    这样确实会有耦合问题,但任何使用上一部分“精简逻辑”的组件化方案,都会在ModuleB中去提供启动Activity的服务方法,而不会暴露Activity
    “动态拦截”
    例如在ModuleA的代码中强行使用ModuleB中的Activity,启动前可以动态拦截插入其他动作
    这个动作在不使用路由的情况下:
    调用者实现
    实现者实现(抽象类/实现类)

  2. 真的理由:
    “多平台统一/清晰的管理”
    这个理由无解,对于大型项目很容易出现原生/H5混合的情况这样最方便,而且路由表确实好看。

由此可见,对于组件化来说,路由实现本身只是一种实现方式。
路由本身注重的是多平台混合开发的情况,组件化通信只是路由中的一个功能。

你可能感兴趣的:(Android)