如何使用 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

在 kotlin-multiplatform 上生成 UUID?

[精选] Mysql分表与分库如何拆分,如何设计,如何使用

如果加入条件,我该如何解决。如果使用字符串连接,我如何使用

如何使用本机反应创建登录以及如何验证会话