Android 开发路由框架(六)高级功能与扩展

一、拦截器高级用法

1. 多拦截器协同工作

拦截器可以多个同时使用,它们按照优先级顺序执行:

IRouterManager
    .getInstance()
    .addInterceptor(LoginInterceptor()) // 优先级 1
    .addInterceptor(PermissionInterceptor()) // 优先
    级 2
    .addInterceptor(LogInterceptor()) // 优先级 3

2. 拦截器链的工作原理

拦截器链的执行流程:

  1. 按照优先级顺序执行拦截器
  2. 每个拦截器可以选择:
    • 继续执行下一个拦截器(调用 chain.proceed(request) )
    • 中断拦截器链,直接返回结果
  3. 所有拦截器执行完成后,执行实际的路由跳转

3. 自定义拦截器示例

class PermissionInterceptor : IRouteInterceptor {
    override val priority: Int = 2
    
    override fun intercept(chain: InterceptorChain): 
    NavigationResult {
        val request = chain.request()
        
        // 检查是否需要特定权限
        if (needPermission(request)) {
            // 检查权限
            if (!checkPermission()) {
                // 请求权限
                requestPermission()
                return NavigationResult(false, "需要
                权限")
            }
        }
        
        // 继续执行下一个拦截器
        return chain.proceed(request)
    }
    
    // 检查是否需要权限
    private fun needPermission(request: RouteRequest)
    : Boolean {
        // 根据路由路径判断是否需要权限
        return request.path == "/app/CameraActivity"
    }
    
    // 检查权限
    private fun checkPermission(): Boolean {
        // 检查权限逻辑
        return false
    }
    
    // 请求权限
    private fun requestPermission() {
        // 请求权限逻辑
    }
}

二、降级策略高级用法

1. 多级降级策略

可以添加多个降级策略,它们会按照添加顺序执行:

IRouterManager
    .getInstance()
    .addDegradeStrategy(LoginDegradeStrategy()) // 处
    理登录失败
    .addDegradeStrategy(NetworkDegradeStrategy()) // 
    处理网络失败
    .addDegradeStrategy(DefaultDegradeStrategy()) // 
    默认降级策略

2. 自定义降级策略示例

class NetworkDegradeStrategy : IDegradeStrategy {
    override fun handleDegrade(context: Context, 
    routeRequest: RouteRequest, error: Throwable): 
    Boolean {
        // 检查是否是网络错误
        if (error is NetworkException) {
            // 显示网络错误提示
            Toast.makeText(context, "网络连接失败,请检
            查网络设置", Toast.LENGTH_SHORT).show()
            // 跳转到网络设置页面
            val intent = Intent(Settings.
            ACTION_WIFI_SETTINGS)
            context.startActivity(intent)
            return true
        }
        return false // 不是网络错误,交给下一个降级策略处
        理
    }
}

三、动态路由

1. 什么是动态路由?

动态路由是指在运行时动态添加或修改路由规则,而不需要修改代码或重新编译。

2. 动态路由的使用场景

  • 热修复:修复路由路径错误
  • 功能开关:根据服务器配置启用或禁用某些功能
  • A/B 测试:根据用户分组跳转到不同的页面

3. 动态路由示例

// 动态添加路由
RouterCore.addRoute(
    path = "/app/DynamicActivity",
    clazz = DynamicActivity::class.java,
    group = "app",
    needLogin = false
)

// 动态移除路由
RouterCore.removeRoute("/app/OldActivity")

四、路由方法调用

1. 什么是路由方法?

路由方法是指通过路由调用的方法,它可以是任何类中的方法,不限于 Activity 或 Fragment。

2. 路由方法的使用场景

  • 跨模块通信:不同模块之间的方法调用
  • 服务发现:通过路由路径查找和调用服务
  • 功能扩展:动态添加和调用功能

3. 路由方法示例

object MainFragmentParam {


    @RouteMethod(path = "/app/method")
    fun getAccty(): String {

        return "在干嘛呢"

    }

    @RouteMethod(path = "/app/name")
    fun getName(params: Map<String, Any>): String {
        return params["name"].toString()
    }
// 调用方法:
val result = IRouterManager.getInstance().invokeMethod("/app/method")
                    Toast.makeText(this@MainActivity, "调用结果: $result", Toast.LENGTH_SHORT).show()
}

五、扩展和定制

1. 自定义路由类型

除了 Activity 和 Fragment,还可以扩展支持其他类型的路由,如:

  • Service 路由
  • 自定义视图路由
  • 远程服务路由

2. 自定义参数处理器

可以自定义参数处理器,支持更多类型的参数:

  • 自定义对象参数
  • 集合类型参数
  • 序列化参数
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容