本文对Android主流的Router库的异同进行对比,包括阿里的ARouter和mzule的ActivityRouter,详见下表:
类型 | ARouter | ActivityRouter |
相关文章 | ||
共性 | 1. 支持降级处理。 2. 支持Activity的startActivityForResult 3. 组件单独运行的方式:切换library/application方式编译,框架本身没有提供切换方式,开发者自行解决 4. 没有组件调用的超时设置 5. 无法取消组件调用 6. 无法动态注册/注销组件 7. 组件调用代码侵入性都很高 | |
通信机制 | 路由 + 接口下沉 | 路由 + 静态方法 |
activity变量自动注入 | 1. 通过apt生成解析参数的代码 2. 在onCreate方法中调用ARouter.getInstance().inject(this);实现自动注入 | 无 |
调用方式(页面跳转) | ARouter.getInstance().build("/test/activity").navigation(); | Router.create(url).open(context); |
调用方式(调用服务) | ARouter.getInstance().navigation(HelloService.class).sayHello(); | 与页面跳转相同 |
组件向外提供服务 | 接口继承IProvider并下沉到base中,组件中实现接口并通过注解来暴露服务 | 在静态方法上加注解来暴露服务,但不支持返回值,且参数固定位(context, bundle) |
Fragment组件化支持 | 调用服务的方式实现,未支持后续Fragment内部的功能调用 | 不支持 |
组件自动注册方案 | 新版本(1.3.0)开始支持通过插件完成路由注册 1. apt生成各module的路由表 2. TrasnformAPI + ASM扫描路由表并注册到LogisticsCenter中,无需手动维护组件列表 | 1. apt生成各module的路由表 2. apt在application的module通过Modules注解生成RouterInit进行注册 3. 需要手动维护Modules注解中的组件列表 |
跨app组件调用支持 | 不支持 | 支持 |
组件app运行时调用其它组件 | 一起打包或者通过urlScheme来统一转发 | UrlScheme原生支持跨app调用,组件同时安装在设备上即可 通过中介Activity转发:RouterActivity |
组件依赖隔离 | 未隔离 | 无需依赖、完全隔离 |
AOP支持 | 拦截器AOP | 无 |
特点 | 1. 阿里出品,使用者众多,QQ群里交流比较活跃 2. 支持分级按需加载 3. 是一个路由框架,并不是完整的组件化方案,可作为组件化架构的通信引擎 | 1. 业内最早的组件化支持库 2. 通过注解静态方法的方式暴露服务 |
组件定义代码侵入性 | 注解定义路由及参数自动注入,侵入性高 | 注解定义路由,侵入性高 |
混淆配置 | 框架中的所有类及框架相关接口的实现类 | 框架中的所有类 |
参考链接: