swift - 当iPhone进入后台状态时dispatch_time如何工作?

标签 swift grand-central-dispatch

    dispatch_after(
        dispatch_time(
            DISPATCH_TIME_NOW,
            Int64(delay * Double(NSEC_PER_SEC))
        ),
        dispatch_get_main_queue(), closure)

当使用此方法并按 iPhone 上的主页按钮时,延迟将不再起作用或有效。相反,当返回我的应用程序时,发生的情况是,本应在“10 秒”后触发的关闭只会在返回应用程序时发生。不管我是在 1 小时还是 10 秒后返回应用程序。

如何在后台延迟后使触发的关闭工作?

最佳答案

当您按下主页按钮时,您的应用程序将转换为后台状态,如果没有任何东西使其保持在该状态,它将转换为挂起状态,在该状态下不会运行任何代码。

让应用程序在后台运行的一种方法是使用后台任务。

让taskId = UIApplication.sharedApplication.beginBackgroundTask(..)

您可以在代码运行后结束后台任务:

UIApplication.sharedApplication.endBackgroundTask(taskId)

这将允许应用返回暂停状态。

关于swift - 当iPhone进入后台状态时dispatch_time如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40987299/

相关文章:

Swift - 一个方法 2 个类

ios - Swift - 如何计算字节数并将它们转换为兆字节?

swift - 为什么这个group.wait总是成功?

swift - DispatchQueue.main.asyncAfter(deadline : . now() + 5.0) 在 Swift 3 中如何工作?

ios - 使用通用图像 Assets (SpriteKit 游戏)时背景不适合屏幕

ios - 删除 'Old' 恢复购买交易

ios - productsRequest 未在子类中调用

iphone - 如果我有嵌套的 dispatch_async 调用会发生什么?

ios - 等待多个异步下载任务

objective-c - 将延迟的 semaphore_signal 发送到 macOS Grand Central Dispatch 应用程序中的信号量是一个好习惯吗?