使用 kotlin-coroutine 时 OkHttp 调度程序崩溃
Posted
技术标签:
【中文标题】使用 kotlin-coroutine 时 OkHttp 调度程序崩溃【英文标题】:Crash OkHttp dispatcher when use kotlin-coroutine 【发布时间】:2022-01-16 20:36:10 【问题描述】:我正在使用 okHttp 加载数据。
加载数据时发生RuntimeException,导致okhttpDispatcher崩溃。
我使用协程,但它们没有捕获异常并且应用程序崩溃。
如何正确捕获拦截器中抛出的异常?
注意:如果出现IOException,这个构造会正常执行。
class CommentsViewModel(val api: IRetrofitApi): ViewModel()
fun getComments()
viewModelScope.launch(exceptionHandler)
api.loadComments() //When RuntimeException this didn`t catch
val exceptionHandler = CoroutineExceptionHandler _, throwable ->
showError(throwable)
interface IRetrofitApi
@GET("/comments")
suspend fun loadComments() : CommentList
class NetworkModule
fun getClient(): OkHttpClient
return OkHttpClient.Builder()
.addInterceptor chain ->
val request = chain.request().newBuilder()
chain.proceed(request.build())
throw RuntimeException()
.build()
【问题讨论】:
检查一下:***.com/questions/11335328/… 【参考方案1】:见https://***.com/a/58711127/1542667
您不应该从拦截器中抛出 RuntimeException,它被视为无法干净处理的致命错误。 OkHttp 偶尔会包装来自底层库(如 android 网络)的特定 RuntimeException,但否则您应该使用 IOException。
【讨论】:
以上是关于使用 kotlin-coroutine 时 OkHttp 调度程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章
Android 中使用 ThreadPoolExecutor
Android 中使用 ThreadPoolExecutor