如何使用 Kotlin-Multiplatform 在 iOS 应用程序的后台线程中运行任务?
Posted
技术标签:
【中文标题】如何使用 Kotlin-Multiplatform 在 iOS 应用程序的后台线程中运行任务?【英文标题】:How to run a task in background thread on iOS app using Kotlin-Multiplatform? 【发布时间】:2021-07-29 00:16:26 【问题描述】:我一直在尝试在 ios 项目的后台线程上的 Kotlin-Multiplatform 库中运行任务,但遇到了一些问题:
我尝试同时使用 Kotlin-Coroutines 和 GCD 平台库,但只能在 iOS 的主线程中运行任务。每当我尝试将某些内容异步发送到后台线程时,iOS 应用程序都会崩溃并出现以下错误:
“kotlin.native.IncorrectDereferenceException: 非法尝试从其他线程访问非共享 com.hp.jarvis.kmm.LogFile.$saveLog$lambda-0$FUNCTION_REFERENCE$9@155a948”
【问题讨论】:
【参考方案1】:IncorrectDereferenceException
基本上是一个信号,表明您正在尝试从后台线程访问全局状态。
你可以玩弄:
@ThreadLocal
-> 为特定对象的每个线程创建一个副本
@SharedImmutable
-> 将冻结您的对象并使其可用于所有线程,请注意,如果您尝试更改冻结对象的值,您将得到InvalidMutabilityException
我肯定会阅读此博客以了解当前的内存模型:https://touchlab.co/kotlin-native-concurrency/
【讨论】:
以上是关于如何使用 Kotlin-Multiplatform 在 iOS 应用程序的后台线程中运行任务?的主要内容,如果未能解决你的问题,请参考以下文章
如何确定 kotlin-multiplatform 项目中的构建类型
Kotlin-Multiplatform 中的 CPointer