【问题标题】:GCD background task maximum TTLGCD后台任务最大TTL
【发布时间】:2017-04-02 19:21:15
【问题描述】:

我需要能够编写后台任务。如果你愿意的话,小“crons”会执行一些简单的代码。虽然不是 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)
    })
    

【问题讨论】:

  • 标记为重复,我知道您有几个问题,但在发布多个问题之前,您应该单独搜索它们并排除重复项。当你这样做时,编辑你的问题并联系我,我将删除重复的标志。

标签: ios swift grand-central-dispatch


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2016-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    • 2011-09-15
    • 2013-02-04
    • 2017-10-01
    相关资源
    最近更新 更多