【发布时间】:2023-09-14 04:31:01
【问题描述】:
我使用 SwiftUI 框架构建了一个 iOS 应用程序。 我想根据用户是否正在运行长时间运行任务。 因此,我使用 Combine 框架来启动和停止一些与运行活动相关的进程,这些进程使用服务质量为 .background 的后台线程。 但是,我注意到有时启动和停止的过程会延迟或终止。 我可以延迟这个过程,但我不能接受它被杀死。
我想知道我该如何解决这个问题? 因为如果您使用谷歌地图并点击您所在位置的开始导航。 该过程不会被杀死。 所以必须有办法让后台线程上的进程启动更长时间。我只是不知道怎么做。 有什么想法吗?
self.activaity.$running
.subscribe(on: self.BackgroundQueue)
.receive(on: self.BackgroundQueue)
.removeDuplicates(by: {$0 == $1})
.sink(receiveValue: { [self] value in
if value {
self.start()
}
else{
self.stop()
}
})
.store(in: &self.cancellables)
func start() {
self.persistMetaData()
self.persist()
self.sensorManager.startUpdates()
}
谢谢
【问题讨论】:
-
如果不显示一些代码,就无法回答这个问题。此外,谷歌地图导航(后台进程)与在不同线程上的组合调用被杀死是完全不同的。
-
你如何获得你的进程被杀死的信息?你能显示代码吗?
-
我编辑并添加了一些代码。
-
我实际上并不确定线程是否被杀死。但从数据的角度来看,似乎是这样。
-
线程不只是在 iOS 上神秘地被杀死,所以还有其他事情发生。由于您还没有显示
self.activaity.$running是什么,因此很难说发生了什么。此外,没有理由将所有这些都包含在self.BackgroundQueue.async中——你已经在做.receive(on: self.BackgroundQueue)。尝试编辑问题以显示一个最小的、可重复的示例
标签: ios swiftui combine background-thread