WMRouter适配器扩展:轻松集成RxJava3与Kotlin协程的终极指南
WMRouter适配器扩展:轻松集成RxJava3与Kotlin协程的终极指南
【免费下载链接】WMRouterWMRouter是一款Android路由框架,基于组件化的设计思路,有功能灵活、使用简单的特点。项目地址: https://gitcode.com/gh_mirrors/wm/WMRouter
WMRouter作为一款功能灵活、使用简单的Android路由框架,基于组件化设计思路,为开发者提供了高效的页面跳转和服务调用方案。本文将详细介绍如何通过官方适配器轻松集成RxJava3响应式编程和Kotlin协程,让你的Android路由操作更加简洁优雅。
WMRouter架构概览:适配器扩展的设计基础
WMRouter采用责任链模式设计,通过UriRequest统一处理各类跳转需求,包括App内跳转、Web容器跳转、外部URI唤起和通知中心跳转等场景。这种灵活的架构为适配器扩展提供了坚实基础。
框架核心由UriRequest、Interceptor和UriHandler组成,形成多级处理链条。默认实现中包含PageAnnotationHandler、UriAnnotationHandler等多种处理器,覆盖不同路由场景:
RxJava3适配器:响应式路由操作完整指南
RxJava3适配器为WMRouter提供了丰富的响应式编程支持,通过扩展函数将路由请求转换为Observable、Maybe、Flowable、Single和Completable等响应式类型。
核心实现与使用场景
适配器源码位于adapter-rxjava3/src/main/java/com/wmrouter/adapter/rxjava3/RxRouterExtension.kt,主要提供以下扩展函数:
- requestObservable():最常用的Observable类型,适合需要多个事件回调的场景
- requestMaybe():可能有结果或无结果的场景
- requestFlowable():支持背压策略的数据流场景
- requestSingle():只关心成功或失败的单一结果场景
- requestComplete():不关心结果,只需要完成通知的场景
快速使用示例
// 创建路由请求 val request = Router.with(context) .uri("wm_router://page/main") .build() // 使用RxJava3发起请求 request.requestObservable() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe({ // 处理成功 Log.d("Router", "跳转成功: ${it.uri}") }, { // 处理错误 Log.e("Router", "跳转失败", it) })适配器内部通过OnCompleteListener将路由回调转换为RxJava事件,异常统一封装为RouteException,方便错误处理。
Kotlin协程适配器:简洁高效的挂起函数方案
Kotlin协程适配器提供了更加简洁的挂起函数API,让路由操作像同步代码一样直观,同时保持异步特性。
核心实现与优势
适配器源码位于adapter-kotlin-coroutines/src/main/java/com/wmrouter/adapter/coroutines/SuspendRequestExtension.kt,核心函数包括:
- await():基础挂起函数,直接返回UriRequest结果
- awaitDispatcher():可指定调度器的挂起函数,默认Main调度器
简洁使用示例
// 在协程作用域中使用 lifecycleScope.launch { try { // 发起路由请求并挂起等待结果 val request = Router.with(context) .uri("wm_router://page/detail") .build() .await() // 处理成功结果 Log.d("Router", "跳转成功: ${request.uri}") } catch (e: RouteException) { // 处理异常 Log.e("Router", "跳转失败", e) } } // 指定调度器示例 lifecycleScope.launch { val request = Router.with(context) .uri("wm_router://page/settings") .build() .awaitDispatcher(Dispatchers.IO) // 在IO线程处理结果 }协程适配器使用suspendCancellableCoroutine将回调转换为挂起函数,支持协程取消机制,有效避免内存泄漏。
实际应用场景与最佳实践
1. 登录状态检查流程
结合RxJava3的操作符或协程的条件判断,轻松实现登录状态检查:
// RxJava3方式 fun navigateToPersonalCenter() { userService.isLogin() .flatMap { isLogin -> if (isLogin) { Router.with(context) .uri("wm_router://page/personal") .build() .requestSingle() } else { Router.with(context) .uri("wm_router://page/login") .build() .requestSingle() } } .subscribe() } // 协程方式 suspend fun navigateToPersonalCenter() { if (userService.isLogin()) { Router.with(context) .uri("wm_router://page/personal") .build() .await() } else { Router.with(context) .uri("wm_router://page/login") .build() .await() } }2. 多步骤路由跳转
使用RxJava3的concat或协程的顺序调用,实现依赖于前一个跳转结果的多步骤路由:
// 协程方式实现多步骤跳转 suspend fun navigateMultiStep() { val result1 = Router.with(context) .uri("wm_router://page/step1") .build() .await() val result2 = Router.with(context) .uri("wm_router://page/step2") .putExtra("data", result1.extra.getString("result")) .build() .await() }如何添加适配器依赖
要在项目中使用这些适配器,只需在你的build.gradle文件中添加相应依赖:
// RxJava3适配器 implementation project(':adapter-rxjava3') // Kotlin协程适配器 implementation project(':adapter-kotlin-coroutines')如果是通过远程仓库依赖,可咨询项目管理员获取最新坐标。
总结:选择适合你的响应式路由方案
WMRouter的RxJava3和Kotlin协程适配器为Android开发者提供了两种优秀的响应式路由方案:
- RxJava3适配器:适合复杂的事件流处理,拥有丰富的操作符,适合中大型项目
- Kotlin协程适配器:代码更简洁,学习成本低,适合Kotlin项目和追求简洁代码的团队
无论选择哪种方案,都能有效简化路由操作的异步处理逻辑,提升代码可读性和可维护性。通过这两个官方适配器,WMRouter在保持其灵活性和简单性的同时,进一步增强了在现代Android开发中的适用性。
【免费下载链接】WMRouterWMRouter是一款Android路由框架,基于组件化的设计思路,有功能灵活、使用简单的特点。项目地址: https://gitcode.com/gh_mirrors/wm/WMRouter
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
