一、核心模块的作用
route-core 模块是路由库的核心实现,它包含了以下功能:
- 注解处理器:处理路由相关的注解,生成路由表
- 路由核心逻辑:实现页面跳转、参数传递等功能
- 拦截器机制:支持路由拦截和处理
- 降级策略:处理路由失败的情况
二、核心类和接口
1. RouterCore
RouterCore 是路由库的核心类,负责处理所有路由相关的操作。
主要功能:
- 初始化路由表
- 处理路由请求
- 管理拦截器
- 处理降级策略
2. 拦截器接口
IRouteInterceptor 接口定义了路由拦截器的行为:
interface IRouteInterceptor {
// 拦截路由请求
fun intercept(chain: InterceptorChain): NavigationResult
}
3. 降级策略接口
IDegradeStrategy 接口定义了路由失败时的降级策略:
interface IDegradeStrategy {
/**
* 当路由找不到时,执行此方法
* @param path 找不到的路由路径
*/
fun onLost(path: String)
}
4. 路由表接口
IRouteTable 接口定义了路由表的行为:
interface IRouteTable {
fun register()
}
三、路由核心流程
1. 初始化流程
- 应用启动时,调用 RouterCore.init() 初始化
- 加载所有模块生成的路由表
- 注册路由信息到内存中
2. 路由请求流程
- 创建路由请求(包含路径、参数等信息)
- 通过路由表查找目标页面
- 执行拦截器链
- 执行页面跳转
- 处理跳转结果
3. 参数传递流程
- 构建路由请求时,添加参数
- 路由核心将参数转换为 Intent extras
- 目标页面接收并处理参数
四、核心配置
1. 初始化路由库
在 Application 类的 onCreate() 方法中初始化路由库:
class App : Application() {
override fun onCreate() {
super.onCreate()
IRouterManager.init(this)
IRouterManager.setDegradeStrategy(DefaultToastDegradeStrategy(this));
RouterCore.addInterceptor(LoginInterceptor(this));
}
}
2. 配置拦截器
创建自定义拦截器:
class LoginInterceptor(val context: Context) : IRouteInterceptor {
private val logger = Logger.getLogger(LoginInterceptor::class.java.name)
private fun isLoggedIn(): Boolean {
// 模拟登录检查,实际应从 SP 或其他地方获取
return false
}
override fun intercept(chain: Interceptor.Chain) {
val request = chain.request()
val path = request.path
// 假设需要登录的页面路径都以 "/member/" 开头
if (path.startsWith("/account/")) {
if (!isLoggedIn()) {
Toast.makeText(
context,
"拦截器:检测到访问需要登录的页面[$path],但用户未登录,正在跳转到登录页...",
Toast.LENGTH_LONG
).show()
return // 关键:不调用 chain.proceed(),中断跳转
}
}
chain.proceed(request)
}
}
3. 配置降级策略
创建自定义降级策略:
class DefaultToastDegradeStrategy(context: Context) : IDegradeStrategy {
private val appContext: Context = context.applicationContext
private val logger = Logger.getLogger(DefaultToastDegradeStrategy::class.java.name)
override fun onLost(path: String) {
val message = "页面不存在: $path"
// 1. 在后台打印错误日志
logger.severe(message)
// 2. 在前台向用户显示 Toast 提示
Toast.makeText(appContext, message, Toast.LENGTH_LONG).show()
}
}
五、最佳实践
- 初始化时机 :在 Application 的 onCreate() 方法中初始化路由库
- 拦截器使用 :合理使用拦截器处理通用逻辑,如登录检查、权限验证等
- 降级策略 :为重要的路由场景提供合理的降级策略,提升用户体验
- 参数传递 :对于复杂参数,使用序列化或 Parcelable 接口
通过本章的学习,我们了解了路由库核心模块的基本功能和使用方法,接下来我们将深入学习注解处理器的实现细节。