wanandroid
wanandroid copied to clipboard
viewModelScope.launch 默认在主线程执行,block耗时操作有问题吧
/** * 创建并执行协程 * @param block 协程中执行 * @param error 错误时执行 * @return Job */ protected fun launch(block: Block<Unit>, error: Error? = null, cancel: Cancel? = null): Job { return viewModelScope.launch { try { block.invoke() } catch (e: Exception) { when (e) { is CancellationException -> { cancel?.invoke(e) } else -> { onError(e) error?.invoke(e) } } } } }
block执行的方法都是suspend 修饰的,耗时操作会挂起,应该没有问题吧
为什么没用withContext(Dispatchers.IO)?
这点我也有点不明白,不过retrofit的网络请求都是有自己的线程池的,不明白它们请求结果是怎么又切换回主线程的
这是个 viewModelScope , 看看 viewModelScope 代码大概能懂
Retrofit自己切了线程
这是retrofit默认开启了异步请求???