GCD后台任务最大TTL

时间:2017-04-02 19:21:16

标签: ios swift grand-central-dispatch

我需要能够编写后台任务。如果你愿意,可以执行一些简单的代码。虽然我不是GCD的专家,但我想知道:

  1. 我希望后台任务在应用程序完全退出之前在后台实际执行其职责所需的最长时间
  2. 我可以“编程”多个任务并期望它们按时完成
  3. 只要应用程序启动,它们是否只有活动状态? (我打赌他们是,不像本地通知,不关心应用程序是否在后台运行,所以只是要确定)
  4. 如何跟踪它们并在需要时取消?

    例如,我可以做这样的事情并执行任务。我在这里走了1分钟就可以了。

    let backgroundTaskIdentifier = UIApplication.shared.beginBackgroundTask(expirationHandler: nil)
    DispatchQueue.main.asyncAfter(wallDeadline: DispatchWallTime.now() + 60) {
                // Some action here
                UIApplication.shared.endBackgroundTask(backgroundTaskIdentifier)
    })
    

1 个答案:

答案 0 :(得分:0)

您可以使用backgroundTimeRemaining(文档here)打印给定会话的剩余时间。 Apple不保证这个时间会是什么,它会因电池电量,硬件,资源等而异,所以对于长时间运行的持久后台任务来说可能没什么用。您可能需要考虑background fetch API,尽管iOS同样会受到限制,但您无法完全控制它的运行时间。