Xcode "Background Processing" 背景模式是什么?

What is the Xcode "Background Processing" Background Mode?

在Xcode11中,有一个新的后台模式,“后台处理”。我找不到有关此新后台模式功能的任何信息。

是否有包含该信息的任何资源?

此模式会以某种方式影响在后台使用位置更新(区域监控和 SLC)的应用程序吗?

还没有文档。但在 WWDC2019 中,他们解释了它是什么以及如何使用它。这是 link: Apple WWDC 2019

假设您想在后台清理数据库以删除旧记录。首先,您必须在 Background Modes Capabilities 中启用 background processing。然后在你的 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 中安排后台任务。

Note: BGTaskScheduler is a new feature to schedule multiple background tasks that will be performed into the background].

这个后台任务将每周执行一次来清理我的数据库。查看您可以提及的属性以定义任务类型。

"Background Processing" 模式需要 运行 BGTaskScheduler 任务。

BGTaskScheduler:

A class for scheduling tasks run by submitting task requests that launch your app in the background. Configuring the App for Background Tasks Configure the app for background tasks by adding the capabilities for the required background modes, and by adding a whitelist of task identifiers.

为后台任务配置应用程序

Configure the app for background tasks by adding the capabilities for the required background modes, and by adding a whitelist of task identifiers.

应用状态

foreground -> background -> suspended -> terminated

background transfer - 当应用处于后台模式时执行一些任务

添加在后台模式下工作的功能

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

您可以找到如下模式列表:

  • 音频 - recording/playing 背景模式下的音频
  • 位置 - 在后台模式下接收新的位置更新
  • 后台任务
    • 后台获取 - 后台应用刷新任务 - 在加载应用之前需要 30 秒获取最新数据。
    • 后台处理任务 - 在系统友好时间几分钟(例如,在应用程序成为后台后)完成大任务(清晰的视频内容)或优先任务(发送消息)