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机制加载对应classServiceLoader中有相关注释描述,其核心是在META-INF/services下存在配置文件。

而编译过程中,如果proguard流程后产生的jar包文件内部数量超过65535,会导致java resource文件在package流程时被丢弃,即META-INF/servicesspi文件,因此协程不可用。

相关文章可参考:打包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 轻量级信号量 )

从硬件角度去理解协程

从硬件角度去理解协程

从硬件角度去理解协程

CPU的最小执行单位是线程,协程不需要qt支持...直接用现成的协程库就行了