Kotlin协程不可用(java.lang.IllegalStateException: Module with the Main dispatcher is missing)另一种可能原因
Posted Alex_MaHao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin协程不可用(java.lang.IllegalStateException: Module with the Main dispatcher is missing)另一种可能原因相关的知识,希望对你有一定的参考价值。
问题原因
Kotlin内部协程的实现,其核心源码中通过ServiceLoader
加载MainDispatcher
,而ServiceLoader
是利用spi
机制加载对应class
。ServiceLoader
中有相关注释描述,其核心是在META-INF/services
下存在配置文件。
而编译过程中,如果proguard
流程后产生的jar包文件内部数量超过65535,会导致java resource
文件在package
流程时被丢弃,即META-INF/services
的spi
文件,因此协程不可用。
相关文章可参考:打包APK缺失Java资源: ZIP的65535问题
解决方式
上文章的末尾有相关解决方式。其中一种解决方式如下:
最终package
时,从proguard
目录中,仅会取proguad
文件的resource
文件。因此在pakcage
时,根据Input
目录,判断jar
包超限后,将proguard
中的jar包进行裁剪,仅保留java resource
资源。
以上是关于Kotlin协程不可用(java.lang.IllegalStateException: Module with the Main dispatcher is missing)另一种可能原因的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin协程不可用(java.lang.IllegalStateException: Module with the Main dispatcher is missing)另一种可能原因
Kotlin 协程协程并发安全问题 ( 使用 Atomic 并发安全类型 | 使用 Channel 通道 | 使用 Mutext 轻量级锁 | 使用 Semaphore 轻量级信号量 )