Android 开发路由框架(三) 核心模块基础(route-core)

一、核心模块的作用

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. 初始化流程

  1. 应用启动时,调用 RouterCore.init() 初始化
  2. 加载所有模块生成的路由表
  3. 注册路由信息到内存中

2. 路由请求流程

  1. 创建路由请求(包含路径、参数等信息)
  2. 通过路由表查找目标页面
  3. 执行拦截器链
  4. 执行页面跳转
  5. 处理跳转结果

3. 参数传递流程

  1. 构建路由请求时,添加参数
  2. 路由核心将参数转换为 Intent extras
  3. 目标页面接收并处理参数

四、核心配置

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()
    }
}

五、最佳实践

  1. 初始化时机 :在 Application 的 onCreate() 方法中初始化路由库
  2. 拦截器使用 :合理使用拦截器处理通用逻辑,如登录检查、权限验证等
  3. 降级策略 :为重要的路由场景提供合理的降级策略,提升用户体验
  4. 参数传递 :对于复杂参数,使用序列化或 Parcelable 接口
    通过本章的学习,我们了解了路由库核心模块的基本功能和使用方法,接下来我们将深入学习注解处理器的实现细节。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容