iOS 13-使用BGTaskScheduler并非始终有效

问题描述 投票:0回答:1

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

我必须实现BGTaskScheduler,才能支持iOS 13。BackgroundTask的旧实现在较旧的iOS版本上适用于我。

我已根据要求添加了后台模式(由于我们在此功能中执行了一个小的BLE操作,因此选中了BLE配件):

enter image description here

然后,我根据文档准备了Info.plist(标识符是假的仅用于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") } }
这里的问题是它非常不一致。 Apple保证不会在给定日期之前执行任务,但不能保证将在确切的时间执行任务(我很好,但有一点延迟)。但是,当我运行该应用程序时,无论我是否提供了任务请求延迟(使用earlyestBeginDate),它都无法100%地运行,因此它下次尝试提交时通常要先尝试7秒(而不是5秒)该任务花了26秒,第三次

never

到达了关闭位置。我是否以错误的方式实现BackgroundTask?我在互联网上搜索了一些答案,但没有遇到任何遇到此问题的人。
ios swift taskscheduler background-task ios-background-mode
1个回答
-1
投票
正如badhanganesh所说,似乎只有在系统决定执行任务时才会执行任务。苹果在WWWDC 2019, session #707期间表示。
© www.soinside.com 2019 - 2024. All rights reserved.