【问题标题】:Running a Task triggered by Apple Watch运行由 Apple Watch 触发的任务
【发布时间】:2022-12-18 19:38:53
【问题描述】:
我有一个应用程序,它使用 URLSession 请求收集一些数据。这些请求不能并行运行,因为我需要一个请求的响应来触发下一个请求。整个过程最多可能需要 30 秒。在 iPhone 上,使用后台任务可以正常工作...
现在我想使用 Apple Watch 触发它,但是一旦应用程序进入“非活动”状态(显示屏变暗),一切都会停止。当我保持显示屏开启并且应用程序处于活动状态时,它运行良好......
解决这个问题的最佳方法是什么,或者甚至没有办法解决这个问题?
【问题讨论】:
标签:
swift
watchkit
watchos
【解决方案1】:
如果您希望 Apple Watch 应用程序在显示屏变暗时继续在后台运行,您可以使用后台 WKRefreshBackgroundTask 来保持应用程序处于活动状态。这将允许应用程序继续运行并发出 URL 请求,即使在显示屏关闭时也是如此。
要使用 WKRefreshBackgroundTask,您首先需要使用 WKExtension 单例注册任务,如下所示:
let task = WKRefreshBackgroundTask.register(with: .immediate,
expirationHandler: {
// Code to execute when the task expires
})
在此示例中,WKRefreshBackgroundTask 注册为立即模式,这意味着只要用户保持显示,应用程序将继续在后台运行。您还可以使用计划模式指定任务到期的具体时间,或使用延迟模式指定任务到期的时间间隔。
注册任务后,您可以使用它来保持应用程序在后台运行并发出 URL 请求。当任务完成或过期时,您需要在任务对象上调用 setTaskCompleted 方法,如下所示:
task.setTaskCompleted()
这将向系统发出信号,表明任务已完成,应用程序可以暂停。