iOS 13 - 使用 BGTaskScheduler 并不总是有效
iOS 13 - Using BGTaskScheduler doesn't work all the time
问题:
我想 运行 一个简单的功能,应用程序进入后台后 5 秒。
我必须实施 BGTaskScheduler,以支持 iOS 13。
BackgroundTask 的旧实现适用于旧 iOS 版本。
我按要求添加了后台模式(BLE accessories被勾选是因为我们在这个函数中执行了一个小的BLE操作):
然后,我根据文档准备了Info.plist(Identifier is fake just for Whosebug question):
在 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")
}
}
这里的问题是它非常不一致。苹果 gua运行tee 任务不会在给定日期之前执行,但不 gua运行tee 它将在准确的时间执行(稍有延迟我没问题)。
然而,当我 运行 这个应用程序时,它并没有 100% 的时间工作,不管我是否为任务请求提供了延迟(使用 earliestBeginDate)所以它过去先尝试 7 秒(而不是 5 秒),下次提交任务用了26秒,第三次从未到达闭包
我是否以错误的方式实现了 BackgroundTask?我在网上搜索了一些答案,但没有遇到任何人遇到这个问题。
正如 badhanganesh 所说,似乎只有在系统决定执行任务时才会执行任务。
Apple 在 WWWDC 2019, session #707.
期间表示
问题: 我想 运行 一个简单的功能,应用程序进入后台后 5 秒。
我必须实施 BGTaskScheduler,以支持 iOS 13。 BackgroundTask 的旧实现适用于旧 iOS 版本。
我按要求添加了后台模式(BLE accessories被勾选是因为我们在这个函数中执行了一个小的BLE操作):
然后,我根据文档准备了Info.plist(Identifier is fake just for Whosebug question):
在 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")
}
}
这里的问题是它非常不一致。苹果 gua运行tee 任务不会在给定日期之前执行,但不 gua运行tee 它将在准确的时间执行(稍有延迟我没问题)。 然而,当我 运行 这个应用程序时,它并没有 100% 的时间工作,不管我是否为任务请求提供了延迟(使用 earliestBeginDate)所以它过去先尝试 7 秒(而不是 5 秒),下次提交任务用了26秒,第三次从未到达闭包
我是否以错误的方式实现了 BackgroundTask?我在网上搜索了一些答案,但没有遇到任何人遇到这个问题。
正如 badhanganesh 所说,似乎只有在系统决定执行任务时才会执行任务。 Apple 在 WWWDC 2019, session #707.
期间表示