首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS 13 -使用BGTaskScheduler并不总是起作用

iOS 13 -使用BGTaskScheduler并不总是起作用
EN

Stack Overflow用户
提问于 2019-12-23 11:58:38
回答 1查看 10K关注 0票数 12

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

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

我按要求添加了背景模式(因为我们在这个函数中执行了一个小的BLE操作,所以会勾选BLE附件):

然后,我根据文档编写了Info.plist (标识符是假的,仅用于StackOverflow问题):

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

代码语言:javascript
复制
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:

代码语言:javascript
复制
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保证该任务不会在给定日期之前执行,但并不保证它将在确切的时间内执行(我很好,稍微延迟一下)。然而,当我运行这个应用程序时,它不能工作100%的时间,不管我是否提供了任务请求的延迟(使用earliestBeginDate),所以它过去是第一次尝试7秒(而不是5秒),下一次我提交任务花了26秒,第三次从未到达关闭。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-24 08:07:13

正如badhanganesh所说,似乎只有当系统决定这样做时,才会执行任务。苹果在WWWDC 2019,会议#707期间就这么说了。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59454989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档