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

How does dispatch_time work when iPhone becomes in background state?

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

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

如何在后台 delay 之后触发 closure

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

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

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

然后您可以在您的代码 运行s:

之后结束后台任务

UIApplication.sharedApplication.endBackgroundTask(taskId)

这将允许应用程序返回挂起状态。