什么是Xcode的“后台处理”背景模式?

50

在Xcode 11中,有一个新的后台模式,“后台处理”。我找不到任何关于这个新后台模式的信息。

后台模式功能图片

是否有相关信息资源?

这个模式是否会影响在后台使用位置更新(区域监控和SLC)的应用程序?


我有同样的问题。我已经启用了这个功能,但似乎对应用程序没有任何影响。我的应用程序执行一些后台任务,这就是我启用它的原因。 - A K M Saleh Sultan
3个回答

55

目前还没有文档可用。但在WWDC2019中,他们解释了它是什么以及如何使用它。以下是链接: Apple WWDC 2019

比如你想要在后台清理你的数据库以删除旧记录。首先,你需要在后台模式的功能中启用后台处理。然后在你的Info.plist文件中添加后台任务计划程序标识符: 来自Info.plist文件的截图,显示允许的后台任务调度程序标识符。

接下来,在'ApplicationDidFinishLaunchingWithOptions'方法中注册你的标识符与任务。

BGTaskScheduler.shared.register(forTaskWithIdentifier: "com.example.apple-samplecode.ColorFeed.db_cleaning", using: nil) { task in
    // Downcast the parameter to a processing task as this identifier is used for a processing request
    self.handleDatabaseCleaning(task: task as! BGProcessingTask)
}

把你想要在后台执行的工作放入操作队列中。在我们的例子中,清理函数会是这样:

// Delete feed entries older than one day...
func handleDatabaseCleaning(task: BGProcessingTask) {
    let queue = OperationQueue()
    queue.maxConcurrentOperationCount = 1

    // Do work to setup the task
    let context = PersistentContainer.shared.newBackgroundContext()
    let predicate = NSPredicate(format: "timestamp < %@", NSDate(timeIntervalSinceNow: -24 * 60 * 60))
    let cleanDatabaseOperation = DeleteFeedEntriesOperation(context: context, predicate: predicate)

    task.expirationHandler = {
        // After all operations are canceled, the completion block is called to complete the task
        queue.cancelAllOperations()
    }

    cleanDatabaseOperation.completionBlock {
        // Perform the task
    }

    // Add the task to the queue
    queue.addOperation(cleanDatabaseOperation)
}

现在,当应用程序进入后台时,我们必须在BGTaskScheduler中安排后台任务。

注意:BGTaskScheduler是一项新功能,可安排执行多个在后台执行的后台任务。

enter image description here

此后台任务将每周执行一次,以清理我的数据库。请查看您可以提到以定义任务类型的属性。


1
API 中没有一个特性可以掌控 BGTasks 被调用的频率吗?换言之,控制其不被过度调用的唯一方法是像你所做的那样自己进行控制,比如将现在的时间与一周前进行比较? - GarySabo
1
BGAppRefreshTaskRequest和BGProcessingTaskRequest之间除了允许的执行时间之外有什么区别,为什么不总是只使用BGProcessingTaskRequest? - Android
1
当应用程序在后台运行时,我们可以触发它吗? - Satyam
1
同样的问题:当应用程序在后台运行并完全关闭时,我们可以触发它吗? - iKK
1
有没有任何想法如何将这个用于Ionic应用程序? - Parth Savaliya
显示剩余4条评论

6

"后台处理"模式是运行BGTaskScheduler任务所必需的。

BGTaskScheduler:

一种通过提交任务请求来调度在后台启动应用程序的任务的类。通过添加所需背景模式的功能以及添加任务标识符白名单来配置后台任务的应用程序。

配置后台任务的应用程序

通过添加所需背景模式的功能以及添加任务标识符白名单来配置后台任务的应用程序。 enter image description here


4

Xcode背景模式

应用程序状态

foreground -> background -> suspended -> terminated

后台传输 - 在应用程序处于后台模式时执行某些任务。

为了添加在后台模式下工作的能力:

App Target -> Signing & Capabilities -> + Capability -> Background Modes

您可以找到以下模式列表:
  • 音频 - 在后台模式下录制/播放音频
  • 位置 - 在后台模式下接收新位置更新
  • 后台任务
    • 后台获取 - 应用后台刷新任务 - 30秒获取最新数据,然后加载应用程序。
    • 后台处理任务 - 在系统友好的时间内(例如在应用程序转为后台后立即),花费几分钟完成大任务(清除视频材料)或优先任务(发送消息)

[后台会话]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接