何时何地获取腕表复杂功能的数据

2024-04-27

经过几天的复杂工作后,我有信心对按规定间隔发生的更新的更新过程进行以下说明:

  • The system calls requestedUpdateDidBegin()
    • This is where you can determine if your data has changed. If it hasn't, your app doesn't have to do anything. If your data has changed, you need to call either:
      • reloadTimelineForComplication如果您的所有数据都需要重置。
      • extendTimelineForComplication如果您只需将新项目添加到复杂功能时间线的末尾。
    • 注意:系统可能实际调用requestedUpdateBudgetExhausted()代替requestedUpdateDidBegin()如果您当天花费了过多的并发症时间预算。这就是这个问题的由来。
  • 如果你打电话reloadTimelineForComplication,系统会调用getCurrentTimelineEntryForComplication(以及获得数组的未来和过去的变体,具体取决于您的时间旅行设置)
  • 这是推测,因为我还没有测试过,但我相信如果你打电话extendTimelineForComplication那只有getTimelineEntriesForComplication(... afterDate date: NSDate ...)会被称为。
  • 然后系统会调用getNextRequestedUpdateDateWithHandler这样您就可以指定您的并发症需要多长时间进行新的更新。

苹果的文档非常清楚,你不应该太频繁地要求更新,或者在复杂功能代码中进行太多处理,否则你会耗尽你的时间预算,并且你的复杂功能将停止更新。所以,我的问题是:你们在何时何地进行更新?

对于上下文,我的场景是返回数据每小时最多更改两次的 URL。

放置 URL 获取代码的最明显位置是func requestedUpdateDidBegin()获取数据,存储,如果没有变化,就返回。如果有更改,则延长或重新加载时间线。

然而,URL 获取的成本可能很高。备择方案:

  • 将代码放在手机应用程序上并通过WCSession,但如果用户关闭该应用程序,则更新将不再发生。
  • 使用推送更新,但这不是网络应用程序,所以我没有地方发送它们。
  • 显然,当用户与手表应用程序交互时,我将更新所有数据,但这意味着它仅在用户使用应用程序时才会更新,这消除了复杂性的需要。

还有其他地方吗?我可以在手表应用程序中添加不属于复杂功能的周期性功能吗?哪里是获取复杂功能更新数据的正确位置?


对于 watchOS 3,Apple 建议您不再使用复杂功能数据源getNextRequestedUpdateDate https://developer.apple.com/reference/clockkit/clkcomplicationdatasource/1628062-getnextrequestedupdatedatewithha计划更新以更新您的并发症。

watchOS 2 的旧方式

requestedUpdateDidBegin()实际上只是为了更新复杂性而设计的。使您的复杂功能(和手表应用程序)保持最新通常涉及的不仅仅是重新加载时间线(并且异步检索数据永远不适合旧方法)。

watchOS 3 的新方式

新的更好的方法是使用后台刷新应用程序任务 https://developer.apple.com/reference/watchkit/wkextensiondelegate#1806957。您可以使用一系列后台任务来schedule https://developer.apple.com/reference/watchkit/wkextension/1650848-schedulebackgroundrefresh and handle https://developer.apple.com/reference/watchkit/wkextensiondelegate/1650877-handle您的应用程序扩展在后台被唤醒:

  • 获取新数据

    • using WKWatchConnectivityRefreshBackgroundTask https://developer.apple.com/reference/watchkit/wkwatchconnectivityrefreshbackgroundtask从手机获取数据,或
    • using WKURLSessionRefreshBackgroundTask https://developer.apple.com/reference/watchkit/wkurlsessionrefreshbackgroundtask从服务器下载数据
  • 数据到达后更新您的模型,
  • 从模型更新您的复杂性(通过重新加载或延长时间线),最后
  • 更新应用程序的扩展坞快照以显示扩展坞上的数据

调用每个任务的setTaskCompleted任务完成后立即使用方法。

使用应用程序任务的其他好处

此设计的主要特点之一是手表扩展现在可以处理各种前景和背景场景,其中包括:

  • 当您的应用程序/并发症启动时最初加载数据,
  • 当扩展被后台任务唤醒时,在后台更新数据,以及
  • 当用户从 Dock 恢复您的应用程序时,在前台更新数据。

Apple 建议您利用提供的每一个机会无论您的应用程序是在前台还是后台让您的复杂功能、应用程序和扩展坞快照保持最新。

有什么限制吗?

每天的可用任务总数除以 Dock 中的应用程序数量。扩展坞中的应用程序越少,您的应用程序可以利用的任务就越多。扩展坞中的应用程序越多,您可以使用的应用程序就越少。

  • 如果您的并发症处于活动状态,则您的应用程序每小时至少可以唤醒四次。

  • 如果您的并发症未激活,您的应用程序保证至少每小时唤醒一次。

由于您的应用程序现在在后台运行,因此您需要高效、快速地完成后台任务。

后台任务受到允许的 CPU 时间量和 CPU 使用率的限制。如果您超过 CPU 时间(或在后台使用超过 10% 的 CPU),系统将终止您的应用程序(导致崩溃)。

了解更多信息

  • 一个很好的介绍解释了何时以及为何更新您的手表应用程序,其中包括设计出色的 Apple Watch 体验 https://developer.apple.com/videos/play/wwdc2016/804/.

  • 具体而言,让您的手表应用程序保持最新状态 https://developer.apple.com/videos/play/wwdc2016/218/会议涵盖了您需要了解的所有内容,以确保您的复杂功能、应用程序和扩展坞快照保持最新状态。

  • 观看背景刷新 https://developer.apple.com/library/prerelease/content/samplecode/WatchBackgroundRefresh/Introduction/Intro.html示例代码演示了如何使用WKRefreshBackgroundTask在后台更新 WatchKit 应用程序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

何时何地获取腕表复杂功能的数据 的相关文章

随机推荐

  • 列出 git 标签名称、日期和消息

    如何列出所有标签的标签名称 标签日期和标签消息 看来 git 通过以下方式分离了提交的显示逻辑git log并通过标签git tag使得列出标签名称 标签日期和标签消息变得困难 我可以显示标签日期 姓名和提交消息 using git log
  • bcrypt 中的盐的要点

    抱歉 如果这是一个愚蠢的问题 我只是想知道 bcrypt 中的盐有什么意义 我的意思是 如果您有以下用于从密码创建哈希的代码 function generateSalt salt 2a 13 salt salt 11111111111111
  • iOS 在应用程序内注册推送通知

    Q1 我必须在应用程序启动时执行此操作吗 或者我可以在应用程序中的任何时候触发允许 不允许的提示吗 Q2 有没有办法查明用户是否单击了是 否 打回来 Q3 如果用户已经单击 否 在之前的会话中 我的提示实际上会触发吗 或者我是否需要告诉用户
  • “sed” 在文件中插入反斜杠

    Tool Windows 版 Git Bash Problem 尝试在目录中每个文件的顶部插入文本 connectcentral Code for f in DIR sql do sed i 1i connect central f don
  • iPhone:跳转到uitableview中的下一个uitextfield,如何?

    在我的 iPhone 项目中 我使用 UITableview 和包含 UITextfields 的 UITableViewCells 我在许多应用程序中看到 可以使用下一个按钮跳转到下一个单元格中的下一个文本字段 实现这一目标的最佳方法是什
  • 诊断 Mac OS X 上的堆碎片?

    我正在编写的核心基础应用程序似乎消耗的内存比我实际分配的内存多 根据活动监视器中的 真实内存 计数 我已通过 Instruments 中的 实时字节分配 视图确认我的实际分配符合我的预期 大约 10MB 但活动监视器中的 真实内存 计数显示
  • 轻松安全AppiumService

    我是 Appium 新手 我想使用 Appium 和 C 执行一些 ADB 命令 执行 adb shell ps 的示例 Dictionary
  • 如何延迟forkJoin

    你会怎样拖延 forkJoin 在 rxjs 中 这是我已经拥有但想使用的delay https www learnrxjs io operators utility delay html运营商用那个 return forkJoin thi
  • iOS 内存警告发送到已释放的 UIViewController

    我有奇怪的行为 我的应用程序正在启动UINavigationController 如果我推视图控制器ANavigationController 返回并模拟内存警告一切正常 如果我推相同的视图控制器 ANavigationController
  • 浮点数的最佳中点公式是什么?

    第一个公式 m a b 2 简单 但是存在很大的溢出风险 除了 数值分析 第 9 版伯登和费尔斯指出 当 b a 接近机器的最大精度时 a b 2 有可能返回一个在区间 a b 中不均匀的中点 尽管没有提供进一步的解释 第二个 m a b
  • 如何通过 Angular 6 中的服务将对象发送到不相关的组件?

    所以我是 Angular 的新手 我正在尝试使用服务将对象从组件 1 发送到组件 2 当我将结果记录到 component2 中的控制台时 它没有给我对象的更新值 这可能是因为服务在第二个组件中重新初始化 你能帮忙解决这个问题吗 这是我的代
  • 为什么“(def 元音?(set“aeiou”))”有效?

    我正在看优秀的 Clojure 教程here http ociweb com jnb jnbMar2009 html 在其中一个示例中 它具有如下所示的 Clojure 代码 def vowel set aeiou 这使得元音对于元音返回
  • 如何在vim中的相同行数前面插入多行?

    假设我有两个文本块 其中之一在我的剪贴板中 one two three 另一个位于我正在 vim 中编辑的文件中 AAA BBB CCC 如何在第二个块前面插入第一个块以获得以下结果 oneAAA twoBBB threeCCC 我希望有一
  • html5 下载属性在 FF 中不起作用

    您好 我有一个带有下载属性的锚标记 单击该标记时将从 href 中定义的 url 下载图像 这在 Chrome 中工作正常 但在 Firefox 中它需要浏览器中的图像 有什么办法可以让我们在 FF 中实现这一点吗 a href https
  • BlazorNotifyAuthenticationStateChanged 不会更新基于授权的元素

    我正在实施一个自定义AuthenticationStateProvider并在 mainLayout 中使用来自用户声明的信息 据我了解执行后NotifyAuthenticationStateChanged方法本身应该重新渲染所有使用的组件
  • 带有图像或路径的自定义滑块

    我的 WP7 应用程序中有一个滑块 我想重新设计它的样式 我的默认模板有问题 我做了类似的事情 但我无法将拇指 绑定 到该值
  • R 中独立环境的源脚本,而不是全局环境

    有没有办法source 一个脚本在R这样它就作为父环境附加到全局环境 GlobalEnv 目前 当我获取脚本时 该脚本的所有变量和函数都会出现在我的全局 交互式 环境中 我想将这些变量和函数包含在搜索路径中 但不包含在 GlobalEnv
  • Mockito-thenReturn(true) 仍然在模拟对象上返回 false

    我最近开始阅读有关 Mockito 的内容 根据我的理解 以下代码行必须返回 true 但它返回 false 测试班 public class PersonServiceImplTest Car car InjectMocks CarSer
  • 如何检测 JavaScript 中的哈希值后 URL 是否已更改

    如何在 JavaScript 中检查 URL 是否已更改 例如 像 GitHub 这样使用 AJAX 的网站将在 符号后附加页面信息 以创建唯一的 URL 而无需重新加载页面 检测此 URL 是否发生变化的最佳方法是什么 Is the on
  • 何时何地获取腕表复杂功能的数据

    经过几天的复杂工作后 我有信心对按规定间隔发生的更新的更新过程进行以下说明 The system calls requestedUpdateDidBegin This is where you can determine if your d