gpt4 book ai didi

iOS 13 - 使用 BGTaskScheduler 并不总是有效

转载 作者:行者123 更新时间:2023-11-28 17:48:35 26 4
gpt4 key购买 nike

问题:我想在应用程序进入后台 5 秒后运行一个简单的功能。

我必须实现 BGTaskScheduler , 以支持 iOS 13。BackgroundTask 的旧实现适用于旧 iOS 版本。

我按要求添加了后台模式(BLE accessories 被勾选是因为我们在这个函数中执行了一个小的 BLE 操作):

enter image description here

然后,我根据文档准备了 Info.plist(Identifier is fake 只是为了 StackOverflow 的问题):

enter image description here

didFinishLaunchingWithOptions 结束之前,我注册了我的 BackgroundTask:

if #available(iOS 13.0, *) {
BGTaskScheduler.shared.register(forTaskWithIdentifier: "com.example.MyID", using: .global()) { (task) in
print("My backgroundTask is executed NOW!")
task.expirationHandler = {
task.setTaskCompleted(success: true)
}
}
}

现在,当应用程序运行 didEnterBackground 方法时,我提交一个 BackgroundTaskRequest:

if #available(iOS 13.0, *) {
do {
let request = BGAppRefreshTaskRequest(identifier: "com.example.MyID")
request.earliestBeginDate = Calendar.current.date(byAdding: .second, value: 5, to: Date())
try BGTaskScheduler.shared.submit(request)

print("Submitted task request")
} catch {
print("Failed to submit BGTask")
}
}

这里的问题是它非常不一致。苹果保证任务不会在给定日期之前执行,但不保证它会在准确的时间执行(我可以稍微延迟一下)。但是,当我运行该应用程序时,无论我是否为任务请求提供了延迟(使用 earliestBeginDate),它在 100% 的时间都无法正常工作,所以它过去常常先尝试 7 秒(而不是 5 秒),下次我提交该任务用了 26 秒,第三次从未到达闭包。

我是否以错误的方式实现了 BackgroundTask?我在互联网上搜索了一些答案,但没有遇到任何人遇到这个问题。

最佳答案

正如 badhanganesh 所说,任务似乎只有在系统决定执行时才会执行。Apple表示在WWWDC 2019, session #707期间.

关于iOS 13 - 使用 BGTaskScheduler 并不总是有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59454989/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com