gpt4 book ai didi

ios - 为什么BackgroundTasks中的异步/长时间运行操作不起作用?

转载 作者:行者123 更新时间:2023-12-01 21:54:27 42 4
gpt4 key购买 nike

尝试针对iOS 13+使用BackgroundTasks。长时间运行的操作似乎无效:

// in AppDelegate

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

BGTaskScheduler.shared.register(forTaskWithIdentifier: "foo.bar.name", using: nil) { task in
print("start!")

task.expirationHandler = {
// Not executed
print("expired!")
}
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
// Not executed
print("finish!")
task.setTaskCompleted(success: true)
}
}

return true
}

func applicationDidEnterBackground(_ application: UIApplication) {
BGTaskScheduler.shared.cancelAllTaskRequests()
let request = BGProcessingTaskRequest(identifier: "foo.bar.name")
request.earliestBeginDate = nil // or Date(timeIntervalSinceNow: 0) or Date(timeIntervalSinceNow: 5)...
do {
try BGTaskScheduler.shared.submit(request)
} catch let e {
print("Couldn't submit task: \(e)")
}
}

我还尝试使用带有 Operation的队列(为此,我对其流进行了同步建模)。这也不起作用。一旦需要一些时间才能完成,就会卡住。

它不会将其他任何内容记录到控制台,没有错误,没有过期的任务消息。它显示了长时间运行操作之前的最后一条消息,仅此而已。我通过存储首选项并在重新启动时对其进行检查来确认它不会继续前进。它没有存储。

我在info.plist中添加了“foo.bar.name”(在“允许的后台任务调度程序标识符”中),并启用了后台获取和后台处理功能。我正在使用iOS 13.3.1和Xcode 11.4.1的iPhone上进行测试。

补充说明:
  • 我已经按照此处所述立即开始任务:https://developer.apple.com/documentation/backgroundtasks/starting_and_terminating_tasks_during_development
  • 我也使用Apple的demo project进行了测试。它显示了相同的问题:数据库清理操作未完成(我在cleanDatabaseOperation.completionBlock的开头添加了一个日志,但从未显示)。
  • 最佳答案

    一些观察:

  • 您应该检查register的结果代码。而且,您应该确保没有看到“无法提交任务”日志语句。
  • 根据link you shared中的讨论,您是否在submit调用之后立即设置了断点?这完成了两件事:
  • 首先,确保您按了该行(例如,与SceneDelegate方法相反)。
  • 其次,如果您只是手动暂停应用程序,则应用程序进入后台运行后要经过一段随机的时间,为时已晚。调用submit之后,它必须立即位于该断点中。然后执行e命令。然后恢复执行。

  • 无论如何,当我这样做时,运行您的代码, BGProcessingTaskRequest运行良好。我正在运行iOS 13.4.1(和您一样,Xcode 11.4.1)。

    关于ios - 为什么BackgroundTasks中的异步/长时间运行操作不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61397372/

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