用途:指导与审查 Android 项目中的 Kotlin 协程实现,覆盖作用域选择、Dispatcher 注入、Flow 暴露与收集、异常处理与可测试性。
主要能力与规则:
- 作用域:按场景选择 viewModelScope、lifecycleScope 或注入的 applicationScope,禁止使用 GlobalScope。
- Dispatcher:类内不得硬编码 Dispatchers,必须通过构造函数注入 CoroutineDispatcher,默认可为 Dispatchers.IO 但允许覆盖;数据/领域层的挂起函数需主线程安全,内部用 withContext(dispatcher)。
- 数据层:一次性调用暴露为 suspend 函数,数据流暴露为 Flow;可用 flowOn 让上游在指定调度器执行。
- UI 收集:禁止在 lifecycleScope.launch 或已废弃的 launchWhenStarted 中直接收集,应使用 repeatOnLifecycle(Lifecycle.State.STARTED)。
- ViewModel:用 viewModelScope 启动协程,向 View 暴露 StateFlow 或 SharedFlow,不暴露挂起函数。
- 状态封装:不得公开 MutableStateFlow/MutableSharedFlow,用 asStateFlow() 或向上转型暴露只读类型。
- 异常:不要在泛型 catch 中吞掉 CancellationException,需重新抛出;CoroutineExceptionHandler 仅对 launch 顶层协程有效。
- 可取消性:在紧凑循环中调用 ensureActive() 或 yield()。
- 回调转换:用 callbackFlow 转换回调 API,并在末尾调用 awaitClose 注销监听。
使用方式:按工作流先确定作用域,再连接数据层与 UI,最后运行 ./gradlew test 验证;结构问题可运行 ./gradlew detektDebug。测试可用 runTest、StandardTestDispatcher 与 advanceUntilIdle。
限制:资料未提供收费、价格、平台支持范围或效果数据,暂未提供相关说明。