【发布时间】:2016-08-26 04:17:19
【问题描述】:
我正在使用transferUserInfo 向手表发送统计数据。
当手表处于睡眠或空闲状态(显示时钟),并且手机应用程序正在运行时,会有许多信息被传输(由重复计时器触发)。
应用可以发送多少个“用户信息”队列?有限制吗?
【问题讨论】:
标签: ios watchos-2 watchos watchconnectivity wcsession
我正在使用transferUserInfo 向手表发送统计数据。
当手表处于睡眠或空闲状态(显示时钟),并且手机应用程序正在运行时,会有许多信息被传输(由重复计时器触发)。
应用可以发送多少个“用户信息”队列?有限制吗?
【问题讨论】:
标签: ios watchos-2 watchos watchconnectivity wcsession
只有一个队列(系统提供)。
我不知道您可以添加到队列中的transferUserInfo 消息的数量有任何限制。
但是,您应该考虑两件事:
虽然 iOS 将发送消息并能够清空其队列,但那些已发送(尚未处理)的消息将由 watchOS 保留,直到您的应用可以接收它们。在某些时候,手表可能无法为您的应用保存更多消息。
虽然我不知道 Apple 是如何处理这种情况的,但您应该计划好转移可能会失败,或者更糟的是,被丢弃。
不要围绕试图绕过特定系统的限制来设计您的应用,因为它会很脆弱并且会损坏,尤其是在您没有应急措施来处理可能出现的情况时。
如果您希望在(短)时间内不断发送(大量)消息,那么这在内存或能源使用方面肯定不会有效。
您应该关注 Apple 的 performance tips 以创造积极的用户体验。如果事实证明您的应用是导致手机和/或手表电池寿命不佳的原因,用户将停止使用它。
这里有一些替代方法可以避免手机和手表之间的闲聊:
使用不同的方法,例如updateApplicationContext,这样手机和手表只需处理一个上下文,而不是必须单独处理的长长的消息队列。
维护手机上的统计信息;避免在手表请求/需要它们之前传输当前统计信息。 (这对于 watchOS 3 来说是一种极好的方法,因为您的应用可以在用户启动之前在后台更新)。
批量处理您的数据,以便随着时间的推移发送更少的更新。
同样,不要针对任何特定的数字。一般来说,您更新的频率越低越好。
无论您选择哪种方法,请确保您的应用是健壮的,并且可以处理任何类型的故障,包括被系统终止(例如内存使用过多或后台 CPU 使用过多)。
这两个 watchOS 会议专门介绍了更新手表的时间、原因和方式,并提到了围绕特定使用情况安排更新。例如,如果公交没有运行,请不要在整个晚上更新公交信息。
Designing Great Apple Watch Experiences 中有一个很好的介绍,解释了何时以及为何更新您的手表应用程序。
具体而言,Keeping Your Watch App Up to Date 会话涵盖了您需要了解的所有内容,以使您的复杂功能、应用程序和停靠快照保持最新状态。
【讨论】: