ARouter

1、ARouter 是什么?作用是什么

答案

ARouter 是阿里开源的Android 路由框架

核心作用:

  1. 实现组件化 / 模块化跨组件页面跳转,解耦;
  2. 跨组件方法通信、服务调用
  3. 支持参数自动注入、拦截器、分组路由、依赖解耦;
  4. 不用硬依赖 Activity 类,靠路径字符串跳转。

2、为什么要用 ARouter?不用原生跳转不行吗

答案

原生跳转必须 Intent 显式指定 Activity 类,组件化时模块不能互相依赖,会耦合;

ARouter 通过字符串路径跳转,模块间无直接依赖,完全解耦,适合大型项目组件化架构。

3、ARouter 核心三大功能

答案

  1. 页面路由:跨组件 Activity、Fragment 跳转;
  2. 参数注入 :自动解析 Intent 参数,@Autowired 自动赋值;
  3. 服务路由:跨组件接口服务调用,实现模块间通信。

4、ARouter 简单使用流程

答案

  1. 项目引入 ARouter 依赖、配置 APT 注解处理器;
  2. 在目标 Activity 上加注解:@Route(path = "/模块/页面")
  3. 跳转:ARouter.getInstance().build("/home/main").navigation()
  4. 接收参数:字段加 @Autowired,页面调用 ARouter.getInstance().inject(this) 注入。

5、@Route、@Autowired、@Interceptor 各自作用

答案

  • @Route:标记页面 / 服务的路由路径,编译时注册到路由表;
  • @Autowired:自动注入跳转传递的参数、支持基本类型、对象、序列化对象;
  • @Interceptor:自定义拦截器,做登录拦截、权限校验、埋点、路由预处理。

6、ARouter 底层原理(核心必背)

答案

基于 APT 编译时注解处理 + 路由表映射 + 反射。

  1. 编译阶段:APT 扫描所有 @Route 注解,自动生成路由映射表(路径 → Activity / 服务);
  2. 初始化时:加载所有生成的路由表到内存;
  3. 跳转时:根据传入路径匹配路由表,通过反射实例化目标页面,完成跳转;
  4. 采用分组懒加载,用到哪个组才加载哪个路由表,优化启动速度和内存。

7、APT 是什么?ARouter 为什么用 APT

答案

APT:编译时注解处理器,在编译阶段自动生成 Java 代码。

好处:

  1. 路由表编译时就生成,不占用运行时性能
  2. 避免运行时大量反射扫描,启动更快;
  3. 解耦、不侵入业务代码。

8、ARouter 路由分组的作用

答案

  1. 按业务模块划分路由组,方便管理;
  2. 懒加载机制:初始化不一次性加载所有路由表,只加载当前用到的分组;
  3. 减少 App 启动耗时、降低初始化内存占用。

9、ARouter 拦截器原理与使用场景

答案 拦截器可以在路由跳转前统一拦截、预处理,按优先级顺序执行。

适用场景:登录拦截、权限校验、版本更新弹窗、路由埋点、全局跳转重定向、网络状态判断。

10、ARouter 怎么实现跨组件通信(服务调用)

答案

  1. 定义公共模块的Service 接口
  2. 业务模块实现该接口,并加 @Route 注解;
  3. 通过 ARouter 获取服务接口实例:ARouter.getInstance().navigation(xxxService::class.java)
  4. 面向接口调用方法,模块间无依赖,完全解耦。

11、ARouter 参数传递支持哪些类型

答案

支持:基本类型、String、Bundle、Parcelable、Serializable、自定义对象、集合。通过 withXXX() 传参,@Autowired 自动接收。

12、ARouter 初始化流程

答案

  1. App 初始化 ARouter.init(application)
  2. 加载路由表、分组表、拦截器表;
  3. 初始化路由内核、缓存映射关系;
  4. 后续跳转直接查表匹配。

13、ARouter 有什么优缺点

答案

优点:

  1. 完美支持组件化,模块解耦;
  2. APT 编译时生成路由表,性能高;
  3. 自带参数注入、拦截器、分组、服务路由;
  4. 支持 Fragment 路由、跨模块方法调用。

缺点:

路径硬编码易写错、编译速度略微变慢、多模块 APT 配置稍繁琐。

14、ARouter 能不能跳转 Fragment

答案

可以。

Fragment 同样加 @Route 注解,通过 ARouter 路径匹配获取 Fragment 实例,手动添加到布局,不用依赖 Fragment 类。

15、 ARouter 路由分组有什么用?

  • 按业务模块划分路由组,方便管理;

  • 采用分组懒加载,初始化不加载全部路由表,只用哪个组加载哪个;

  • 减少 App 启动耗时,降低初始化内存占用;

  • 强制路径规范为 /组名/页面名,统一项目规范。

16、ARouter 和原生 Intent 对比

答案

原生 Intent:耦合高、必须依赖目标类、不适合组件化;

ARouter:路径解耦、支持跨组件、自动参数注入、拦截器统一处理、适合大型项目架构。

17、ARouter 会不会有性能问题

答案

几乎没有。路由表编译时生成,运行时只是查表 + 少量反射

加上分组懒加载,初始化和跳转性能都很好,线上大型项目普遍使用。

18、ARouter 路由失败常见原因

答案

  1. 路径写错、大小写不一致;
  2. 没加 @Route 注解;
  3. APT 依赖没配置或注解处理器没生效;
  4. 模块没被 ARouter 扫描到;
  5. 跳转时机过早,还没初始化 ARouter;
  6. 拦截器拦截了跳转。

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 生成路径与页面的路由表;

初始化时按分组懒加载路由表到内存;

跳转时根据路径查表,通过反射完成页面跳转,中间经过拦截器处理。

整个过程无模块依赖、完全解耦,适合组件化架构。

相关推荐
Andya_net2 小时前
MySQL | MySQL 8.0 权限管理实践-精确赋予库、表只读等权限
android·数据库·mysql
阿巴斯甜3 小时前
Map
android
巫山老妖3 小时前
鹅厂十年:三段式技术成长复盘
android·人工智能·程序员
阿巴斯甜3 小时前
List集合
android
ooseabiscuit4 小时前
Laravel6.x核心优化与特性全解析
android·开发语言·javascript
阿巴斯甜5 小时前
Kotlin 协程 Coroutine
android
Jomurphys5 小时前
Compose 适配 - 通过 UiMediaScope 获取设备信息
android·compose
阿巴斯甜6 小时前
必看12
android
阿巴斯甜6 小时前
必看11
android