1、ARouter 是什么?作用是什么
答案
ARouter 是阿里开源的Android 路由框架。
核心作用:
- 实现组件化 / 模块化跨组件页面跳转,解耦;
- 跨组件方法通信、服务调用;
- 支持参数自动注入、拦截器、分组路由、依赖解耦;
- 不用硬依赖 Activity 类,靠路径字符串跳转。
2、为什么要用 ARouter?不用原生跳转不行吗
答案
原生跳转必须 Intent 显式指定 Activity 类,组件化时模块不能互相依赖,会耦合;
ARouter 通过字符串路径跳转,模块间无直接依赖,完全解耦,适合大型项目组件化架构。
3、ARouter 核心三大功能
答案
- 页面路由:跨组件 Activity、Fragment 跳转;
- 参数注入 :自动解析 Intent 参数,
@Autowired自动赋值; - 服务路由:跨组件接口服务调用,实现模块间通信。
4、ARouter 简单使用流程
答案
- 项目引入 ARouter 依赖、配置 APT 注解处理器;
- 在目标 Activity 上加注解:
@Route(path = "/模块/页面"); - 跳转:
ARouter.getInstance().build("/home/main").navigation(); - 接收参数:字段加
@Autowired,页面调用ARouter.getInstance().inject(this)注入。
5、@Route、@Autowired、@Interceptor 各自作用
答案
@Route:标记页面 / 服务的路由路径,编译时注册到路由表;@Autowired:自动注入跳转传递的参数、支持基本类型、对象、序列化对象;@Interceptor:自定义拦截器,做登录拦截、权限校验、埋点、路由预处理。
6、ARouter 底层原理(核心必背)
答案
基于 APT 编译时注解处理 + 路由表映射 + 反射。
- 编译阶段:APT 扫描所有
@Route注解,自动生成路由映射表(路径 → Activity / 服务); - 初始化时:加载所有生成的路由表到内存;
- 跳转时:根据传入路径匹配路由表,通过反射实例化目标页面,完成跳转;
- 采用分组懒加载,用到哪个组才加载哪个路由表,优化启动速度和内存。
7、APT 是什么?ARouter 为什么用 APT
答案
APT:编译时注解处理器,在编译阶段自动生成 Java 代码。
好处:
- 路由表编译时就生成,不占用运行时性能;
- 避免运行时大量反射扫描,启动更快;
- 解耦、不侵入业务代码。
8、ARouter 路由分组的作用
答案
- 按业务模块划分路由组,方便管理;
- 懒加载机制:初始化不一次性加载所有路由表,只加载当前用到的分组;
- 减少 App 启动耗时、降低初始化内存占用。
9、ARouter 拦截器原理与使用场景
答案 拦截器可以在路由跳转前统一拦截、预处理,按优先级顺序执行。
适用场景:登录拦截、权限校验、版本更新弹窗、路由埋点、全局跳转重定向、网络状态判断。
10、ARouter 怎么实现跨组件通信(服务调用)
答案
- 定义公共模块的Service 接口;
- 业务模块实现该接口,并加
@Route注解; - 通过 ARouter 获取服务接口实例:
ARouter.getInstance().navigation(xxxService::class.java); - 面向接口调用方法,模块间无依赖,完全解耦。
11、ARouter 参数传递支持哪些类型
答案
支持:基本类型、String、Bundle、Parcelable、Serializable、自定义对象、集合。通过 withXXX() 传参,@Autowired 自动接收。
12、ARouter 初始化流程
答案
- App 初始化
ARouter.init(application); - 加载路由表、分组表、拦截器表;
- 初始化路由内核、缓存映射关系;
- 后续跳转直接查表匹配。
13、ARouter 有什么优缺点
答案
优点:
- 完美支持组件化,模块解耦;
- APT 编译时生成路由表,性能高;
- 自带参数注入、拦截器、分组、服务路由;
- 支持 Fragment 路由、跨模块方法调用。
缺点:
路径硬编码易写错、编译速度略微变慢、多模块 APT 配置稍繁琐。
14、ARouter 能不能跳转 Fragment
答案
可以。
Fragment 同样加 @Route 注解,通过 ARouter 路径匹配获取 Fragment 实例,手动添加到布局,不用依赖 Fragment 类。
15、 ARouter 路由分组有什么用?
-
按业务模块划分路由组,方便管理;
-
采用分组懒加载,初始化不加载全部路由表,只用哪个组加载哪个;
-
减少 App 启动耗时,降低初始化内存占用;
-
强制路径规范为
/组名/页面名,统一项目规范。
16、ARouter 和原生 Intent 对比
答案
原生 Intent:耦合高、必须依赖目标类、不适合组件化;
ARouter:路径解耦、支持跨组件、自动参数注入、拦截器统一处理、适合大型项目架构。
17、ARouter 会不会有性能问题
答案
几乎没有。路由表编译时生成,运行时只是查表 + 少量反射;
加上分组懒加载,初始化和跳转性能都很好,线上大型项目普遍使用。
18、ARouter 路由失败常见原因
答案
- 路径写错、大小写不一致;
- 没加
@Route注解; - APT 依赖没配置或注解处理器没生效;
- 模块没被 ARouter 扫描到;
- 跳转时机过早,还没初始化 ARouter;
- 拦截器拦截了跳转。
19、ARouter 核心原理
ARouter 是基于 APT 编译时注解 + 运行时路由表查找 + 反射 实现的路由框架。
-
编译时期(APT 注解处理器)项目编译时,ARouter 的 APT 会扫描所有带有
@Route注解的类(Activity、Fragment、服务),自动生成路由映射表,把路径字符串 和目标类一一对应起来。 -
初始化时期 App 启动调用
ARouter.init()时,会加载所有编译时生成的路由表,并按分组 管理,采用懒加载策略,用到哪个分组才加载哪个分组的路由。 -
跳转时期 调用
build("/xxx/xxx").navigation()时:- ARouter 根据路径找到对应的分组
- 在路由表中匹配目标类
- 通过反射实例化目标 Activity / Fragment
- 经过拦截器处理后,最终完成跳转
-
拦截器原理跳转过程会经过全局拦截器,按优先级执行,可做登录校验、权限判断、埋点、重定向等。
-
参数自动注入原理 同样靠 APT 生成注入代码,跳转时自动从 Intent 解析参数,并赋值给使用
@Autowired标记的字段。
最精简面试(30 秒说完)
ARouter 原理分为三步:
编译时用 APT 生成路径与页面的路由表;
初始化时按分组懒加载路由表到内存;
跳转时根据路径查表,通过反射完成页面跳转,中间经过拦截器处理。
整个过程无模块依赖、完全解耦,适合组件化架构。