使用 Swift 3 和后台任务更新并发症
Updating complication with Swift 3 and background task
对于 watchOS 3,Apple 建议使用 WKRefreshBackgroundTask
更新复杂功能,而不是使用 getNextRequestedUpdateDate
。
如何使用新方法确定两次更新之间的时间?
我只会将我的数据请求(来自 url)破解成 getCurrentTimelineEntry
并更新复杂功能,但我认为这并不是 Apple 真正推荐的。
简短的代码示例会有很大帮助。
我大致介绍了这个 ,但我会在这里解决您的具体问题。
你是对的,你不应该破解复杂控制器来做任何(异步)获取。数据源应该只负责根据复杂服务器的请求返回现有的手头数据。 watchOS 2 是这样,watchOS 3 也是如此。
对于 watchOS 3,每次后台刷新都可以安排下一次。
过程概述:
在您的特定情况下,您可以等到 WKURLSessionRefreshBackgroundTask
任务完成下载。届时,安排下一次后台刷新 在 完成您现有的后台任务之前。
在将来的某个时间,您的扩展程序将再次被唤醒以再次启动整个后台进程:
- 从您的网络服务请求新数据
- 处理回复并更新您的数据存储
- 告诉复杂功能进行自我更新(这将使用手头的新数据)。
- 更新停靠快照
- 安排即将到来的后台刷新任务
- 将您当前的任务标记为已完成。
您甚至可以链接一系列不同的后台子任务,其中每个子任务处理刷新周期的一个单独方面,并负责安排以下子任务。
示例代码:
如果您还没有看到它,Apple 提供了它的 WatchBackgroundRefresh 示例代码来演示其中的一部分。您可以使用
WKExtension.shared().scheduleBackgroundRefresh(withPreferredDate:userInfo:)
在当前任务完成之前安排(初始或)未来任务。
尽管他们的示例使用刷新按钮来安排下一次后台刷新,但概念是相同的,无论是用户操作还是后台任务都会安排下一次请求)。
对于 watchOS 3,Apple 建议使用 WKRefreshBackgroundTask
更新复杂功能,而不是使用 getNextRequestedUpdateDate
。
如何使用新方法确定两次更新之间的时间?
我只会将我的数据请求(来自 url)破解成 getCurrentTimelineEntry
并更新复杂功能,但我认为这并不是 Apple 真正推荐的。
简短的代码示例会有很大帮助。
我大致介绍了这个
你是对的,你不应该破解复杂控制器来做任何(异步)获取。数据源应该只负责根据复杂服务器的请求返回现有的手头数据。 watchOS 2 是这样,watchOS 3 也是如此。
对于 watchOS 3,每次后台刷新都可以安排下一次。
过程概述:
在您的特定情况下,您可以等到 WKURLSessionRefreshBackgroundTask
任务完成下载。届时,安排下一次后台刷新 在 完成您现有的后台任务之前。
在将来的某个时间,您的扩展程序将再次被唤醒以再次启动整个后台进程:
- 从您的网络服务请求新数据
- 处理回复并更新您的数据存储
- 告诉复杂功能进行自我更新(这将使用手头的新数据)。
- 更新停靠快照
- 安排即将到来的后台刷新任务
- 将您当前的任务标记为已完成。
您甚至可以链接一系列不同的后台子任务,其中每个子任务处理刷新周期的一个单独方面,并负责安排以下子任务。
示例代码:
如果您还没有看到它,Apple 提供了它的 WatchBackgroundRefresh 示例代码来演示其中的一部分。您可以使用
WKExtension.shared().scheduleBackgroundRefresh(withPreferredDate:userInfo:)
在当前任务完成之前安排(初始或)未来任务。
尽管他们的示例使用刷新按钮来安排下一次后台刷新,但概念是相同的,无论是用户操作还是后台任务都会安排下一次请求)。