android - 标记自定义协程调度程序,使其被视为 Dispatchers.IO
问题描述
我正在使用一个简单的类将调度程序注入我的对象,因此我可以使用不同的调度程序进行测试和实际工作,我使用的类是:
interface IDispatchers {
val IO: CoroutineDispatcher
val CPU: CoroutineDispatcher
val UI: CoroutineDispatcher
}
object AppDispatchers : IDispatchers{
override val UI = Dispatchers.Main
override val CPU = Dispatchers.Default
override val IO = Dispatchers.IO
}
@ExperimentalCoroutinesApi
object TestDispatchers : IDispatchers {
override val IO = Dispatchers.Unconfined
override val CPU = Dispatchers.Unconfined
override val UI = Dispatchers.Unconfined
}
这很好用,完全符合我的要求。
我的问题是 android studio 的最新更新,当我有一个可能阻塞的操作(例如从流中读取)时,它无法理解我确实在使用 IO 调度程序并且它一直显示一条消息
例如,假设我有这个类:
class fooViewModel(val dispatchers:IDispatchers) {
suspend fun thisDoesStuffOnIO() {
//code
val nextLine = withContext(dispatchers.IO) { stream.readLine() }
//more code
}
}
现在当我dispatchers.IO
用实际替换时Dispatchers.IO
它没有显示警告,但是当我回到我的实现时它显示一个警告
我尝试在其中查找注释或属性Dispatchers.IO
,如果复制到我的界面,将禁用检查,但我找不到任何
那么有没有办法让检查了解我正在使用的调度程序确实是一个 IO 调度程序并且没有实际问题?
解决方案
推荐阅读
- css - 响应式图像网格会导致小数像素,这会使图像无法容纳在一行中
- javascript - 当分数变为 200 时结束 p5js 游戏
- html - Angular:在空的情况下在DOM中不显示任何内容
- java - 条件注释不会被触发
- docker - 通过量角器启动无头 chrome 在 docker 中失败
- cuda - ValueError: Unknown CUDA arch (8.6) or GPU not supported
- javascript - Heroku中的应用程序崩溃/在Localhost中工作
- docker - 如何将带有 docker 日志的目录挂载到 docker 容器
- apache-kafka - Apache Kafka Streams API 与 KSQL
- android - 在主线程中使用过渡动画是应用程序可能在 android 的主线程上做太多工作的原因