我遇到了一个并发症,需要通过从服务器获取数据来不时更新。
我正在尝试从 Watch 获取数据。我是通过安排一个WKRefreshBackgroundTask
. 当此任务触发时,我启动一个 URL 会话以从服务器获取一些 JSON 数据。
成功获取数据后,我WKApplicationRefreshBackgroundTask
通过调用其setTaskCompletedWithSnapshot(false)
.
这一切似乎都可以正常工作,但是,我宁愿创建一个WKURLSessionRefreshBackgroundTask
之后WKApplicationRefreshBackgroundTask
在后台下载它并在后台任务中消耗更少的时间。我认为这是不可能的,我没有下载或上传文件。如果我理解正确WKURLSessionRefreshBackgroundTask
,aURLSessionConfiguration.background(withIdentifier:)
只能用于URLSessionUploadTask
s 或URLSessionDownloadTask
s,所以我不得不忘记这个想法。(如果我误解了,请纠正我)。
现在我遇到的最大问题是,当手表被锁定(取下手腕,戴上充电球等)时,URL 请求没有被执行。因此数据没有被更新。我们应该如何处理?当手表被锁定时,活动编辑会变暗,一旦你解锁手表,它就会重新加载。我们可以做些什么来了解手表被锁定/解锁吗?
使用 a 从 Watch 获取数据是正确的方法WKApplicationRefreshBackgroundTask
,还是唤醒手机并让手机使用 请求数据更好WatchConnectivity
?如果是这样:WCSessionDelegate
您将使用哪些功能来实现这一目标?
如果直接从 Watch 获取数据是要走的路:我可以WKApplicationRefreshBackgroundTask
在请求完成之前将其设置为完成,还是应该等到请求完成之后?(即,应该在什么时间点WKApplicationRefreshBackgroundTask.setTaskCompletedWithSnapshot()
调用)。
我阅读了大量文章并观看了多个视频。然而,我仍然很难找到正确的架构来从服务器获取编译数据并让这个工作坚如磐石。
希望有人可以对此事有所启发。