gpt4 book ai didi

ios - 何时何地获取 Watch Complication 的数据

转载 作者:IT王子 更新时间:2023-10-29 07:51:45 24 4
gpt4 key购买 nike

在处理了几天的复杂问题之后,对于按规定时间间隔发生的更新的更新过程,我有信心说出以下内容:

  • 系统调用requestedUpdateDidBegin()
    • 在这里您可以确定您的数据是否已更改。如果没有,则您的应用程序无需执行任何操作。如果您的数据已更改,您需要调用:
      • reloadTimelineForComplication 如果您的所有数据都需要重置。
      • extendTimelineForComplication 如果您只需要将新项目添加到并发症时间线的末尾。
    • 注意:如果您当天花费了过多的复杂时间预算,系统实际上可能会调用 requestedUpdateBudgetExhausted() 而不是 requestedUpdateDidBegin()。这就是这个问题的原因。
  • 如果您调用了reloadTimelineForComplication,系统将调用getCurrentTimelineEntryForComplication(以及获取数组的 future 和过去变体,具体取决于您的时间旅行设置)
  • 这是推测,因为我还没有测试过,但我相信如果你调用 extendTimelineForComplication 只有 getTimelineEntriesForComplication(... afterDate date: NSDate ...) 将被调用。
  • 然后系统将调用 getNextRequestedUpdateDateWithHandler,这样您就可以指定您的并发症需要多长时间才能进行新的更新。

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

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

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

但是,URL 提取的成本可能很高。备选方案:

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

还有别的地方吗?我可以在 watch 应用程序中使用不属于复杂功能的定期功能吗?为复杂功能更新获取数据的正确位置在哪里?

最佳答案

对于 watchOS 3,Apple 建议您不要使用复杂功能数据源 getNextRequestedUpdateDate计划更新以更新您的并发症。

watchOS 2 的旧方法

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

watchOS 3 的新方式

新的更好的方法是使用 background refresh app tasks .您可以使用一系列后台任务来 schedulehandle您的应用程序扩展在后台被唤醒以:

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

使用应用任务的其他好处

此设计的一个关键特性是 watch 扩展现在可以处理各种前台和后台场景,包括:

  • 在您的应用程序/复杂功能启动时初始加载数据,
  • 在后台更新数据,当扩展被后台任务唤醒时,
  • 当用户从 Dock 恢复您的应用时,在前台更新数据。

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

有什么限制吗?

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

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

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

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

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

了解更多信息

关于ios - 何时何地获取 Watch Complication 的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32813930/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com