Orisumi

Foreground Application Period

应用处于前台的一个时段

前台应用时段表达“应用 A 处于前台”。它保存对本机应用的引用和当时读到的应用名称;这一段从几点到几点,保存在引用它的 Observation 上。

粒度

一个应用连续处于前台的一段活动,对应一份 Observation。每次确认都在补全这一份 Observation;窗口标题变化时,应用时段照样延续。

前台时段只表达系统确认的前台应用。锁屏、休眠和无输入属于其他时间线,读取方需要时再组合,见 Desktop · 各自的时间线。

身份

本机应用、应用名称或时区变化时,前台状态 Observer 结束当前时段,新建观测内容和 Observation,原来的内容保持不变。

引用

字段目标
localApplicationVersionIdLocal Application

事实时间

应用、名称和时区都没变时,每次确认都延长同一份 Observation:观测内容和开始时间保持不变,结束时间更新为这次确认的时刻。这个结束时间只是最近一次确认,不代表这段已经结束,见 TIME-4。

事件当前时段下一个时段
首次确认应用在前台—从确认时刻开始
切换应用,或名称、时区变化结束于新的确认时刻从同一时刻开始
读取失败、停止采集或程序退出结束于最后一次确认恢复后新建
两次确认的间隔超过定时间隔的 3 倍结束于最后一次确认从恢复后的确认时刻开始
系统时间跳变,原来的边界无法延续结束于最后一次确认从恢复后的确认时刻开始
系统即将休眠结束于最后一次确认唤醒后重新读取,从新的确认时刻开始
  • 两个边界都已知时,时段是 [startAt, endAt)。只确认过一次时,开始和结束相同,时长为零。
  • 应用激活事件随时触发确认,定时确认默认每 1 秒一次,断开的阈值是定时间隔的 3 倍。
  • 系统时间倒退或重复时断开。墙上时间的增量与持续计时的增量相差超过 100 毫秒时,同样断开。
  • 休眠期间程序不运行,没有确认的证据,所以休眠通知会结束当前时段。如果漏掉了通知,包含休眠和不含休眠的两种计时之差会超过 100 毫秒,时段同样断开。macOS 两种计时的区别见 Mach 时间接口。
  • 时段的边界取确认的时刻。定时读取只确认当前的状态,两次定时确认之间发生的切换由应用激活事件补上。
  • timeZone 是采集时本机的 IANA 时区,未知时为 null。

EntitySchema

项目值
SchemaId019e1bbb-ec00-7000-8000-000000000001
显示名称前台应用时段
说明表达某个本机应用连续处于前台的一段活动;内容保存应用引用与当时读到的名称,Observation 保存时段。
资源名foreground-application-periods
字段类型必填可空含义
localApplicationVersionIdreference是否观测设备上的本机应用
namestring是是当时读到的应用名称,没读到时为 null

示例

VS Code 从 10:00 到 10:20 处于前台,时段结束后,POST /versions 依次提交观测内容和它的 Observation。localApplicationVersionId 是本机应用首版的 VersionId,observerVersionId 是程序实例的一个版本:

POST /versions
{
  "versions": [
    {
      "entityId": "01a12e31-9050-7000-8000-000000000020",
      "versionId": "01a12e31-9050-7000-8000-000000000120",
      "previousVersionId": null,
      "category": "business",
      "schemaVersionId": "019e1bbb-ec00-7000-8000-000000000101",
      "content": {
        "localApplicationVersionId": "01a12e31-9050-7000-8000-000000000101",
        "name": "Visual Studio Code"
      }
    },
    {
      "entityId": "01a12e31-9050-7000-8000-000000000030",
      "versionId": "01a12e31-9050-7000-8000-000000000130",
      "previousVersionId": null,
      "category": "observation",
      "schemaVersionId": null,
      "content": {
        "observerVersionId": "01a12e31-9050-7000-8000-0000000000a1",
        "contentVersionId": "01a12e31-9050-7000-8000-000000000120",
        "inputSetVersionId": null,
        "startAt": "2026-10-06T02:00:00Z",
        "endAt": "2026-10-06T02:20:00Z",
        "timeZone": "Asia/Shanghai"
      }
    }
  ]
}

贡献者

页面历史