某学姐

Android Female Developer,Technology Fan,Reader。

Android学习笔记——ARouter

2018-11-01 | Comments

源码地址:
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源码分析

本文原文发自 某学姐, 转载请保留出处, 谢谢.

Comments