我有一个公共交通应用程序,其中包含火车的实时出发数据。
我想添加一个复杂功能,显示下一趟火车的出发时间。
是否可以显示(或刷新)有关并发症的实时数据?例如,显示“到 X 站 3 分钟”。根据来自公共交通 API 的信息,数据每分钟都可能发生变化。
我应该如何在 watchOS 2 或 watchOS 3 上完成此操作?
我知道 ETA 应用程序会显示复杂情况下的行程时间,但我不确定他们是如何实现这一点的。
可以实时更新吗?
-
并发症并不是为了显示实时数据而设计的。频繁更新会影响能源效率并影响电池(手表和手机)。
为了最大限度地减少功耗,ClockKit 要求您提供尽可能多的可用数据,然后缓存数据并在需要时呈现它。
-
虽然复杂功能时间线的重新加载次数没有固定的限制,但复杂功能数据源受每日执行时间预算的限制。
如果您的应用程序的数据经常更改,则可能很难提供足够的数据来显示复杂功能。更糟糕的是,如果您过于频繁地刷新复杂功能数据,则可能会超出执行时间预算,并且您的复杂功能可能要到第二天才会更新。
-
一旦每日预算用完,请致电reloadTimeline (and extendTimeline) 没做什么。
如果您的并发症已经超出了分配的每日执行时间预算,则调用此方法不会执行任何操作。请谨慎调用此方法。
复杂功能如何显示相对时间?
一个复杂功能怎么会频繁更新呢?
-
您可以使用复杂功能推送更新(从远程服务器,或在 iOS 10 中从手机本地)。
每天的复杂功能推送更新上限为 50 次。
-
您可以在手机上获取数据并使用transferCurrentComplicationUserInfo.
在 watchOS 2 中,这仅受每日预算的影响。在 watchOS 3 中,现在限制为每天 50 次传输。
See TransferCurrentComplicationUserInfo是否更适合复杂功能更新?更多细节。
-
在 watchOS 2 中,你可以使用getNextRequestedUpdateDate安排下次更新您的并发症的时间。
这种情况发生的频率不会超过每十分钟一次。
请注意,watchOS 3 应用程序应升级为使用后台刷新应用程序任务。主要好处是后台任务能够做的不仅仅是更新您的并发症。他们还可以处理数据获取、数据到达后更新模型以及更新码头快照。
-
最后,您可以安排手动更新。在 watchOS 3 中,推荐的方法是通过后台刷新应用程序任务。
任务预算允许每小时执行 4 个任务。看scheduleBackgroundRefresh更多细节。
请注意,后台刷新应用任务使用的 CPU 不得超过 10%。
WWDC 2016 会议推荐
208 watchOS 3 的新增功能介绍其中一些主题。
804 设计出色的 Apple Watch 体验讨论何时以及为何更新您的手表应用程序。
218 让您的手表应用程序保持最新状态提供有关使用后台任务更新复杂功能、应用程序和扩展坞快照的详细信息。
正如会谈中提到的,您应该在需要时安排更新。
对于您的用例,示例仅在公共交通运行时以及仅在定期出发时间受到延误影响时进行。
苹果示例代码
苹果提供观看背景刷新示例代码演示如何使用WKRefreshBackgroundTask
在后台更新 WatchKit 应用程序。
要更新后台任务中的任何活动并发症,您只需添加代码来重新加载(或延长)时间线:
let complicationServer = CLKComplicationServer.sharedInstance()
for complication in activeComplications {
complicationServer.reloadTimelineForComplication(complication)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)