【发布时间】:2019-08-22 04:58:42
【问题描述】:
Swift 新手:将 Objective-C AppleHealth 集成代码移植到由 Flutter/Dart 调用的 Swift。当我背景或锁定旧版 Obj-C 应用程序时,它几乎会立即暂停所有执行。 但是,在我的 Swift 代码端口中没有发生相同的行为,我在 Swift 中使用与旧版 Obj-C 应用程序中相同的 DispatchQueue,
暂停很重要的原因是,一旦用户锁定 iPhone 屏幕,AppleHealth 会加密其所有数据,并且无法使用。 我的理解也是正确的,当您暂停 DispatchQueue 时,当前执行的块将完成,但后续块不会开始执行。 据我所知,Swift 代码移植模仿了 Obj-C 逻辑,任何关于它为何表现不同或我可能遗漏的任何提示都将不胜感激。
我正在使用
进行调度DispatchQueue.global(qos: .default).async {
/* code */
}
如果可以让新应用程序立即暂停我提交到 DispatchQueue 的所有执行代码,那么在后台或锁定屏幕时我会非常高兴。
【问题讨论】:
-
您不能暂停
DispatchQueue任务。如果您需要更多控制权,您应该使用OperationQueue。这是两者之间的主要区别,如果在DispatchQueue块中写入了某些内容,则该任务将在某个时候执行。 -
@SharadChauhan - 在这方面,操作队列与自定义调度队列没有区别。如果您的应用程序仍在运行,挂起队列也不会挂起在
OperationQueue上运行的操作。当你挂起一个操作队列时,它只会阻止新的操作开始。但正在进行的操作不会暂停。
标签: ios swift healthkit dispatch-queue