用途:仅当用户明确要求把 RxJava 迁移到 Kotlin 协程/Flow 时使用,采用渐进式迁移。
主要能力:先做复杂度判断,凡出现嵌套 flatMap/switchMap 内含 Single/Observable、自定义 Scheduler、retryWhen/退避等复杂错误恢复、3 个以上源 zip/combineLatest、Flowable 显式背压策略、跨类共享 Subject、返回类型不明确,任一条件即判为复杂,需先给策略并征求用户输入再写代码。迁移前必须确认被调用 API 的返回类型,不能假设。
类型映射:Observable/Flowable→Flow(Flowable 用 buffer()/conflate() 对应背压);Single/Maybe/Completable→suspend fun 的 T/T?/Unit;PublishSubject/ReplaySubject(n)→MutableSharedFlow(replay=0/n);BehaviorSubject 需先询问,选用 MutableStateFlow 或 MutableSharedFlow(replay=1)。
调度器:io→Dispatchers.IO,computation→Default,mainThread→Main;observeOn(mainThread) 在协程模型中转为调用方(ViewModel 的 viewModelScope)在 Main 收集,需向开发者解释;被调 API 已是 suspend 时自行管理调度器,subscribeOn 无对应物,不要重复 withContext;subscribeOn+observeOn 用 flowOn(仅上游)。
重试陷阱:Flow 的 retry 谓词接收 Throwable 而非索引,依赖尝试次数的策略用 retryWhen { cause, attempt -> }。
互操作:加入 kotlinx-coroutines-rx3(或 rx2),仅在层边界使用桥接,同一函数体内不混用;可用 observable.asFlow()、single.await()、maybe.awaitSingleOrNull()、completable.await() 及 flow.asObservable()、flow.asSingle()。按从叶子往上迁移(数据源→仓库→用例→ViewModel),每层迁移完移除桥接并按层提交。
复杂情形需先停并询问:retryWhen 策略细节、自定义 Scheduler 对应调度器、Flowable 背压选择、flatMap/switchMap 用于写入时 switchMap→flatMapLatest 会取消进行中工作的风险、跨类共享 Subject 的归类;onErrorResumeNext→catch 需重抛 CancellationException。onCleared() 中 compositeDisposable.clear() 应整体删除,因为 viewModelScope 会自动取消。限制:仅在用户明确要求时使用。