源码地址:
https://github.com/alibaba/ARouter
wiki地址:
https://github.com/alibaba/ARouter/blob/master/README_CN.md
开源最佳实践:Android平台页面路由框架ARouter:
https://yq.aliyun.com/articles/71687
从项目结构角度,整个项目包含4个library:
arouter-annotation
arouter-compiler
arouter-api
arouter-gradle-plugin
1.arouter-annotation
Route
路由注解,用来标注路由路径,分组,优先级等信息
Autowired
自动装配注解,用来注入参数
Interceptor
拦截注解,用来标注拦截优先级等信息
RouteMeta
路由最基本的数据信息,包括路由类型,目标Class,路由路径,路由分组,优先级,额外信息,参数类型等
RouteType
路由类型,有Activity,Service,ContentProvider,Fragment等等
2.arouter-compiler
RouteProcessor
路由处理器
InterceptorProcessor
拦截处理器
AutowiredProcessor
装配处理器
TypeUtils
类型交换工具类
3.arouter-api
ARouter
从业务流程角度,整个项目分成4个阶段:
编译阶段 -> ARouter.init -> ARouter.build(path) -> Postcard.navigation()
基本使用:
ARouter.init(mApplication);
ARouter.getInstance().build("/test/activity")
.withLong("key1", 666L)
.withString("key3", "888")
.withObject("key4", new Test("Jack", "Rose"))
.navigation();
1、编译阶段:
相关类:
RouteProcessor
InterceptorProcessor
AutowiredProcessor
2、ARouter初始化
3、Postcard构建
4、Navigation
涉及的技术:
1、外观模式:ARouter包装_ARouter
2、依赖注入:ARouter.getInstance().inject(this)实现Activity的@Autowired成员变量赋值
3、Annotation、APT编译器注解处理技术、JavaPoet
4、反射,比如服务的实例化
5、拦截器,准确的说应该不是AOP技术,只是一种类AOP的设计思想,InterceptorServiceImpl拦截器实现巧妙
6、SchemeFilterActivity,scheme,url的统一管理跳转
7.多线程思想
8.降级策略,DegradeService
9.服务接口设计思想,方便扩展
控制反转(IoC)与依赖注入(DI)
Spring的IOC原理
功能介绍 支持直接解析标准URL进行跳转,并自动注入参数到目标页面中 支持多模块工程使用 支持添加多个拦截器,自定义拦截顺序 支持依赖注入,可单独作为依赖注入框架使用 支持InstantRun 支持MultiDex(Google方案) 映射关系按组分类、多级管理,按需初始化 支持用户指定全局降级与局部降级策略 页面、拦截器、服务等组件均自动注册到框架 支持多种方式配置转场动画 支持获取Fragment 完全支持Kotlin以及混编(配置见文末 其他#5) 支持第三方 App 加固(使用 arouter-register 实现自动注册) 支持生成路由文档
参考文档:
路由方案之ARouter源码分析