每五秒一次的心率:HealthKit 应用会发生什么变化

新的 Apple Watch 传感器给 HealthKit 应用带来了什么变化? Apple Watch Series 12 和 Apple Watch Ultra 4「全天候每五秒测量一次心率」,心率变异性(HRV)则「最快每五分钟一次」,苹果称之为「频率提升 24 倍」。2 但苹果的新闻稿描述的是手表测量什么,而不是它向 HealthKit 写入什么;文档索引中没有 readiness 类型,只多了一个新的 HRV 类型 heartRateVariabilityRMSSD。8 苹果 2024 年的白皮书把此前的后台测量频率定为静止时每五分钟尝试一次。因此请预设 HealthKit 中的后台数量可能密集得多,无论是表现为样本变多,还是表现为序列变长,然后在完整佩戴一天之后实测真实的写入密度。11

苹果在 2026 年 9 月 9 日发布了这两款手表,两者都搭载由全新光学与电学心脏传感器组成的 Health Sensing System。13 面向消费者的故事是 readiness。面向开发者的故事是密度,而苹果给出了两个可供推算的数字。

TL;DR: 每五秒一次的心率,若全部保留,一天就是 17,280 个读数;最快每五分钟一次的 HRV,一天最多 288 个。此前的基线来自苹果 2024 年的白皮书:后台心率在静止时每五分钟尝试一次,运动读数按每五秒窗口发布一个,HRV 心动图默认每四小时一次,开启不规则心律通知后为两小时,开启 AFib History 后为 15 分钟。由此可知苹果的「24 倍」对应的是两小时这个基线,尽管苹果并未说明自己拿哪种设置作比较。211 名义上,全天候心率的测量频率是旧有后台尝试频率的 60 倍;其中有多少真正抵达 HealthKit 尚未公布,readiness 没有对应的 HealthKit 类型,而第二个 HRV 标识符 heartRateVariabilityRMSSD 出现得毫无说明。8 现在就转向 anchored query、statistics collection 以及入库前聚合,然后在 Series 12 完整佩戴一天之后实测。56

苹果的原话

Apple Watch Series 12 case back in the keynote, engraved 46mm aluminum case, WR-50M, glass ceramic, GPS and Cellular, with the green optical sensor lit

苹果 2026 年 9 月 9 日发布会直播画面,太平洋时间上午 10:37:亮起光学心脏传感器的 Series 12 背面;苹果把每五秒的测量频率归功于这些更大的绿色 LED。

支撑这次变化的有三处表述,与其概括,不如直接引用。

关于心率:「凭借光学心脏传感器上更大、更省电的绿色 LED,Apple Watch Series 12 和 Apple Watch Ultra 4 现在能够全天候每五秒测量一次心率。这种持续、被动的测量让用户对自身体能与生理状态有更深入的了解,同时让 Exercise 和 Move 两个 Activity 圆环更加准确。」2

关于 HRV,健康主题的新闻稿称其「现在最快每五分钟测量一次」,称之为「频率提升 24 倍」,并且「可在 Heart Rate 应用的新版块中查看」;硬件新闻稿的说法是「最多提升到 24 倍」。123 另有 Series 12 新闻稿中的一段:「Apple Watch 提供两种彼此独立的 HRV 变体,帮助用户更好地理解自己的健康状况。Recovery HRV 最适合识别每日的压力与恢复信号,overall HRV 则最适合洞察用户更广泛的健康状况,包括心血管健康。」1

关于 readiness:健康主题的新闻稿把它描述为「一项分析用户近期活动、体征与睡眠评分的新功能,每天给出 0 到 10 的单一评分,并附上清晰、可执行的建议:Recover、Pace Yourself、Ready 或 Go For It」。2 两份硬件新闻稿都列出了第四项输入——训练负荷,而健康主题的新闻稿对此只字未提。13

两款手表将于 9 月 18 日星期五发售,watchOS 27 则于 9 月 14 日星期一向 Series 9 及更新机型、SE 3、Ultra 2 及更新机型推送。3

此前的测量频率是多少

苹果关于心率的支持页面,用一句话概括了 Series 1 以来所有 Apple Watch 的后台行为:手表「在您静止时全天测量心率,在您行走时定期测量」,而在运动期间及结束后三分钟内持续测量。4 真正公布了间隔的是苹果的心率白皮书。后台算法「仅在用户静止时报告测量结果。它尝试每 5 分钟报告一个以 bpm 为单位的心率」,白皮书还精确写明了上限:「在每一个互不重叠的五分钟窗口内,Apple Watch 尝试向 HealthKit 发布一个后台心率,能否发布取决于信号质量与用户的活动状态。」运动及用户主动触发的算法则早已按新频率运行:「在每一个互不重叠的五秒窗口内,算法会挑选质量最高的一个心率测量结果用于显示并发布到 HealthKit。」11 所以后台算法的上限是每天 288 次尝试,每一次都以静止和信号质量为前提;白皮书称信号质量允许时会「发布到 HealthKit」的行走抽测,以及 Heart Rate 应用中的测量,都会叠加在此之上,而运动数据流本来就是五秒一次。11 关于 HRV,白皮书写得很具体:「心动图的默认测量频率为每四小时一次;当用户开启不规则心律通知或 AFib History 时,分别提高到每两小时或每 15 分钟一次。」11 把苹果的「频率提升 24 倍」与「每五分钟」对应起来,算出来正好是两小时,因此这个隐含的两小时基线与不规则心律通知的频率吻合,尽管苹果并未说明自己的比较设置;我自己的 SDNN 数据流一天只有寥寥几个样本,且大多在夜间,接近四小时这个默认值。2

所以这次变化在很大程度上并不是新增 API,而是同样的 heartRate 和 heartRateVariabilitySDNN 类型,可能承载多出一个数量级的样本,外加一个新类型 heartRateVariabilityRMSSD。8 运动区间与生殖健康方面的新增内容,见 iOS 27 HealthKit 一文。

真正抵达 HealthKit 的是什么,仍是未解之问

苹果的新闻稿谈的是测量。截至 9 月 9 日,无论新闻稿还是 iOS 27 的 SDK 文档,都没有说明每五秒的读数是否都会变成一个 HKQuantitySample,还是手表会先聚合再写入。heartRate 页面确实带有一条长期存在的提示:「样本数据可能被 HealthKit 压缩和/或合并」,而它指向的文章把这一行为限定在「至少已有几个月」的第一方运动上——在那种情况下,HealthKit 会把「取值相同且发生时间相近的数量」合并为一个区间数量。这也是应当读统计值而非样本的又一个理由。8 24 小时内的计数不受此影响,几个月前的第一方运动样本计数则会受影响。有三个具体的未知数:

  1. 样本密度。 此前的手表在运动中本就大约每五秒写入一个心率样本;我自己的 Watch 在一次 53 分钟的跑步中记录了 639 个心率样本,一次 70 分钟的跑步中记录了 870 个。后台心率则是静止时每五分钟窗口最多一个,再加上行走抽测。11 新的部分是运动之外的五秒频率。如果 Series 12 按其测量速率全天写入,算下来每位用户 24 小时就是 17,280 个心率数量;由于一个样本可以承载一个序列,HKQuantitySample 对象的数量可能与之不同。12 反过来,如果它仍按旧频率写入后台读数,把五秒数据留给自家算法使用,那么对你来说什么都没变。只有真机能给出答案。
  2. 两种 HRV 变体。 HealthKit 一直只有一个 HRV 标识符 heartRateVariabilitySDNN,iOS 27 的 SDK 新增了第二个 heartRateVariabilityRMSSD,目前的文档只是一条没有任何说明的声明。8 苹果没有说 Recovery HRV 和 overall HRV 是否分别对应 RMSSD 与 SDNN,所以第一天就把两个类型都读出来,并与 Heart Rate 应用中显示的内容对照。
  3. readiness。 苹果把它描述为一项带评分和建议的功能。今天的 HealthKit 文档索引里没有 readiness 类型,新闻稿也没有提到第三方访问。在 SDK 给出不同说法之前,就当它是苹果专属。

9 月 18 日之前该改什么

以下这些都不需要新硬件。无论密度是每五分钟尝试一次、每天 288 个,还是每五秒一个、每天 17,280 个,这些模式都始终成立。

读增量,别读整天。 HKAnchoredObjectQuery 只返回自你持久化的锚点之后新增或删除的样本,而且可以保持打开以接收更新。5 每次启动都对最近 24 小时重跑一次样本查询的应用,做的是随样本数增长的功;到了两万个样本,这笔开销每次启动都要付一遍。我没有测过它从哪里开始变痛,而这恰恰是不该继续付这笔钱的理由。

概览用统计值,细节用样本。 HKStatisticsCollectionQuery 按你选定的区间返回由 HealthKit 计算好的最小值、最大值和平均值,因此日视图无论底下压着多少读数,请求到的结果数量都是有界的。6 原始读数留给真正需要它们的视图,比如单次运动或一段恢复窗口,并且要在新密度下对这些视图做性能分析,而不是假定它们扛得住:五秒的数据流可能会在五分钟图表原本只画一个点的地方放上 60 个点。

有意识地选择后台推送。 enableBackgroundDelivery(for:frequency:) 接收一个 HKUpdateFrequency,系统「在所指定频率定义的每个时间段内最多唤醒你的应用一次」;.immediate 会「在任何进程保存或删除指定类型的样本时」唤醒你的应用,但同样受苹果文档所述的频率限制约束,而在 watchOS 上,文档写明「大多数数据类型都有每小时的最大频率」。7 除医疗场景外,几乎所有用途每小时一次都够用,其间到达的数据交给 anchored query 去取。

入库前先聚合。 那些为了离线图表或同步而把 HealthKit 镜像到自家数据库的应用,应当存储每分钟或每五分钟的聚合值,只为确实需要的窗口(例如一次运动)保留原始样本。一个每天增长数千行的存储会遭遇什么,见 SwiftData 性能一文。

给查询设上限。 HKSampleQuery 接收 limit 和排序描述符,两者都要用。做增量读取时,给 HKAnchoredObjectQuery 设一个 limit,并从它返回的锚点继续,而不是按日期分页。59

把逐搏数据分开存。 更密集的 BPM 读数不是 RR 间期,所以别把它们倒进心跳序列里。逐搏间期本来就有 HKHeartbeatSeriesSample,用 HKHeartbeatSeriesBuilder 写入;应用采集的 RR 间期数据用它,而 BPM 读数无论频率多高,都放在 heartRate 样本里。10

产品的空间在哪里

Keynote recap slide for the Health app: Longevity, lab results, strength and balance assessments, Health Age, Readiness, Insights tab, on-demand VO2 max

苹果 2026 年 9 月 9 日发布会直播画面,太平洋时间上午 10:44:Health 应用的总结幻灯片,也就是一个通用健身仪表盘从此要与之竞争的那块地方。

readiness 将随手表一同登场。重新设计的 Health 应用「将于今年晚些时候先以美国英语推出」,新增一个包含 Health Age 的 Longevity 标签页;苹果表示该标签页除自家数据外还会取用「第三方应用与设备」的数据,用户在美国「将能够预约并购买」售价 119 美元的化验套餐。23 在我看来,一个通用健身仪表盘与之竞争,只会输。苹果没有做的是具体:一项运动的恢复、一种疾病的配速、一个社群的教练闭环、一位临床医生点名要的视图。更密集的心率数据只会让这些做得更好。苹果说 Longevity 视图会取用「第三方应用与设备」的数据,因此你的应用写入 HealthKit 的样本,在重新设计的 Health 应用上线后或许会出现在那里;苹果并未说明哪些数据符合条件,而不论如何,写入优质样本而非什么都不写,这个理由都依然成立。2

第一天就该跑的测试

从 9 月 18 日起佩戴 Series 12,在完整戴满一天之后测量一个 24 小时窗口。对 heartRate 执行一次样本查询,记录与该窗口相交的 HKQuantitySample 对象数量;一个数量样本「包含一个或多个 HKQuantity 对象」,而它的 count 覆盖整个样本,因此把 count 相加会把落在窗口之外的那部分序列也算进去。12 至于读数总数,请对同一类型执行 HKQuantitySeriesSampleQuery;它的 handler 会把每个数量连同各自的日期区间一起交给你,因此只保留起始时间落在 [start, end) 内的数量并计数,再计算相邻数量之间的间隔,按小时、按来源设备、按当时是否正在进行运动分组;把查询的 includeSample 设为 true,handler 还会把所属样本及其设备一并交给你。12 对 heartRateVariabilitySDNN 和 heartRateVariabilityRMSSD 做同样的事。需要报告六项:窗口、手表与 watchOS 版本号、是否开启了不规则心律通知或 AFib History、容器数量、窗口内的数量总数,以及运动中与非运动时的间隔中位数。这些数字将决定上文各节究竟是预防措施还是紧急情况。对于此前的手表,苹果 2024 年的白皮书给出了向 HealthKit 发布的频率;对于 Series 12,苹果尚未发布任何能给出同一数字的资料。11

要点回顾

给 HealthKit 开发者: - Series 12 和 Ultra 4 每五秒测量一次心率、最快每五分钟测量一次 HRV,但苹果没有说其中有多少会抵达 HealthKit。按苹果白皮书所述,此前的手表在静止时每五分钟尝试一次后台读数。211 - 现在就转向 anchored query 和 statistics collection;两者在任何密度下都是正确的。56 - 除非某项功能确实需要更快,否则把后台推送保持在每小时一次,并在入库前聚合。7

给产品决策: - 在苹果的新闻稿和当前的 HealthKit 索引中,readiness 与 Health Age 都没有第三方入口;HRV 则新增了第二个类型 heartRateVariabilityRMSSD。请基于样本构建,而不是基于评分。28 - 空间在于具体:一项运动、一种疾病、一个社群,也就是苹果的通用仪表盘止步之处。

常见问题

HealthKit 会收到每五秒的每一个心率读数吗?

苹果没有说。新闻稿描述的是手表上的测量,而不是 HealthKit 中的存储。苹果 2024 年的白皮书称,此前的手表在运动中每五秒窗口发布一个读数,在后台每五分钟窗口尝试一个读数,而没有覆盖 Series 12 的更新版白皮书。请在完整佩戴一天之后,也就是 9 月 19 日或更晚再测量:统计 HKQuantitySeriesSampleQuery 返回的数量中起始时间落在这个 24 小时窗口内的那些,并单独报告 HKQuantitySample 的容器数量。21112

第三方应用能拿到 readiness 评分吗?

苹果已公布的任何材料中都没有相关内容。HealthKit 文档索引里没有 readiness 类型,新闻稿也没有提到第三方访问。2

Recovery HRV 和 overall HRV 是两种不同的 HealthKit 类型吗?

未知。HealthKit 一直公开的是 heartRateVariabilitySDNN,iOS 27 的 SDK 新增了 heartRateVariabilityRMSSD,但只是一条没有说明的声明。苹果没有说其中哪一个承载哪种变体,甚至没有说是否有对应关系。8

watchOS 27 会改变旧款手表吗?

苹果给出的五秒与五分钟这两个数字,专指 Series 12、Ultra 4 及其新传感器。watchOS 27 可以运行在 Series 9 及更新机型上,但新闻稿把新的测量频率归因于硬件。23

我的心率图表会崩掉吗?

建立在 HKStatisticsCollectionQuery 之上的图表,对固定时间范围返回的区间结果数量是有界的,因此点数不会随密度变化,尽管取值会变;而直接绘制原始样本的图表,做的是随样本数增长的功。请在手表发售之前按新密度做一次性能分析,并把概览类图表切换过去。6

参考来源


  1. Apple Newsroom,Introducing Apple Watch Series 12, with the all-new Health Sensing System,2026 年 9 月 9 日。引用:两种 HRV 变体;HRV「最多提升到 24 倍」;包含训练负荷在内的 readiness 输入项。 ↩↩↩↩

  2. Apple Newsroom,Apple advances health and fitness capabilities using Apple Intelligence,2026 年 9 月 9 日。引用:两款手表每五秒测量心率及关于 Activity 圆环的那句话;HRV「最快每五分钟一次」与「频率提升 24 倍」;readiness 的定义与四条建议;重新设计的 Health 应用「今年晚些时候先以美国英语推出」;Longevity 标签页的第三方数据。 ↩↩↩↩↩↩↩↩↩↩↩↩↩

  3. Apple Newsroom,Apple unveils Apple Watch Ultra 4,2026 年 9 月 9 日。HRV「最多提升到 24 倍」;包含训练负荷在内的 readiness 输入项;watchOS 27 于 9 月 14 日推送;9 月 18 日发售;「将能够预约并购买」119 美元的化验套餐。 ↩↩↩↩↩↩

  4. Apple 支持,Monitor your heart rate with Apple Watch,2026 年 9 月 9 日获取。引用:后台测量「在您静止时全天测量,在您行走时定期测量」;运动期间及结束后三分钟内的持续测量。 ↩

  5. Apple Developer Documentation,HKAnchoredObjectQuery。 ↩↩↩↩

  6. Apple Developer Documentation,HKStatisticsCollectionQuery。 ↩↩↩↩

  7. Apple Developer Documentation,enableBackgroundDelivery(for:frequency:withCompletion:) 与 HKUpdateFrequency。 ↩↩

  8. Apple Developer Documentation,heartRateVariabilitySDNN、heartRateVariabilityRMSSD(iOS 27.0、watchOS 27.0 引入)以及 heartRate,后者注明「样本数据可能被 HealthKit 压缩和/或合并」;其中链接的文章 Accessing condensed workout samples 把该行为限定在「至少已有几个月」的第一方运动上,并描述了把取值相同的心率数量合并为区间数量的做法;截至 2026 年 9 月 9 日,HKQuantityTypeIdentifier 与 HKCategoryTypeIdentifier 索引中都没有列出 readiness 或 Health Age 标识符。 ↩↩↩↩↩↩↩

  9. Apple Developer Documentation,HKSampleQuery。 ↩

  10. Apple Developer Documentation,HKHeartbeatSeriesSample 与 HKHeartbeatSeriesBuilder。 ↩

  11. Apple,Heart Rate, Calorimetry, and Activity on Apple Watch,2024 年 11 月,2026 年 9 月 9 日获取。引用:后台算法「仅在用户静止时报告测量结果。它尝试每 5 分钟报告一个以 bpm 为单位的心率」;「在每一个互不重叠的五分钟窗口内,Apple Watch 尝试向 HealthKit 发布一个后台心率,能否发布取决于信号质量与用户的活动状态」;「在每一个互不重叠的五秒窗口内,算法会挑选质量最高的一个心率测量结果用于显示并发布到 HealthKit」;行走抽测:「如果信号质量足够,抽测得到的行走心率会发布到 HealthKit」;HRV:「心动图的默认测量频率为每四小时一次;当用户开启不规则心律通知或 AFib History 时,分别提高到每两小时或每 15 分钟一次。」 ↩↩↩↩↩↩↩↩↩

  12. Apple Developer Documentation,HKQuantitySample:「一个数量样本包含一个或多个 HKQuantity 对象」;count 属性;以及 HKQuantitySeriesSampleQuery,「一种访问与数量样本相关联的序列数据的查询」,其 handler 会收到每个数量及其日期区间,而 includeSample 属性决定「该查询是否应返回序列样本」。 ↩↩↩↩

相关文章

可调整大小的 iPhone 时代:在 9 月之前让你的 App 做好准备

iOS 27 把可调整大小的分界线画在了你所使用的 SDK 上。检查清单:排查固定尺寸的假设、采用自适应布局、在 Xcode 27 中测试。

7 分钟阅读

面向开发者的 iPhone Duo:1.42 的难题与 SDK 空窗期

面向开发者的 iPhone Duo:从 App Store Connect 截图推算出的显示屏点数、两种屏幕形状、Split View、Touch ID、SDK 时间表,以及六场 Tech Talks。

26 分钟阅读

Mac App Store 不允许窗口管理器存在,我还是把它上架了

App Sandbox 禁用了每一款窗口平铺工具都需要的 API,Apple 让我在商店之外发布。941 Tiles 却在商店里上架了:移动窗口的是 Apple 自己的 Shortcuts 引擎。

8 分钟阅读