返回博客

我们如何尝试降低里程记录的耗电量

自适应记录、批量保存,以及应对手机发热。了解 Orphie 背后的技术选择、其中的取舍,以及我们仍需测量的部分。

示意图:路线上的点在弯道处较密,在直路上较疏,旁边是一部手机和成组的记录。

司机讨论里程记录应用时,常会提到耗电问题。有人说手机发热、需要频繁充电,也有人不确定行程结束后应用是否停止了记录。这些是个人反馈,不是受控对比测试,但这些顾虑值得重视。

开发 Orphie 时,我们考虑的不只是获取位置和累计里程。我们还需要决定,每个位置要经过多少处理、何时保存,以及手机发热时该怎么做。

下面介绍其中的一些选择。

直路和急弯需要不同的处理方式

里程记录应用依靠定位点还原路线。点之间相隔太远,弯道就会变成一条切过弯角的直线。如果手机报告的每一点微小移动都保留下来,可能只是留下了定位噪声,并没有增加多少有用的行程信息。

Orphie 使用自适应记录策略。它会考虑速度和方向变化,而不是整次出车都使用同一种点间距规则。

温度正常时,策略会在慢速行驶和方向变化时采用较密的点间距,最小可到 15–25 米。在速度较快、较直的路段,保留的点之间可以相隔 100 米。

在路线变化处保留细节

慢速行驶和转弯较密的点间距
较快、较直的路段较疏的点间距
这是记录策略的示意图,不是实测行程。点间距随速度和方向变化;手机尚未报告的转弯,策略无法提前预知。

这种方法有局限。我们只能对手机已经报告的移动作出反应。点间距变大,可能会丢失细节。这些阈值是技术上的选择,需要与实际行驶路线对照检查,并不保证里程记录完全准确。

我们使用手机的定位系统

在 iPhone 上,Orphie 通过 Apple 的 Core Location 接收后台位置更新;在 Android 上,则使用 Google 的融合定位服务。位置的提供由操作系统管理。Orphie 处理收到的更新,不会在自己的轮询循环里反复请求当前位置。

两个平台允许我们控制的部分不同。在 Android 上,记录策略会影响请求的位置更新间隔和最小移动距离。在 iPhone 上,我们使用 Apple 面向驾车场景的位置更新,并将策略应用于我们接受的定位点。

这个区别很重要。在 iPhone 上保留较少的点,并不意味着我们已经指示 GPS 硬件减少唤醒次数。我们能控制自己的处理工作,但不应声称拥有平台并未提供的硬件控制能力。

我们批量保存定位点

接收位置和将位置写入存储是两项不同的工作。如果每个点都通过单独的数据库事务保存,就会产生重复工作。

Orphie 会先将接受的点放入缓冲区,再一起保存。记录过程中,每当接受一个新点,如果缓冲区已有 50 个点,或其中最早尚未保存的点已存在至少 60 秒,就会触发一次检查点保存。

先汇集定位点,再写入存储

接受的位置
临时缓冲区
一起保存

50 个点,或最早的点已存在至少 60 秒

只有在接受下一个点时才检查阈值。这不是每分钟唤醒应用的定时器,也不保证尚未保存的数据最多只有 60 秒。

如果一段时间没有接受新的点,缓冲区可能会更久未保存。停车以及操作记录控件时,也有保存的机会。

批量保存有代价。如果应用在写入完成前突然终止,尚未保存的点可能丢失。只在出车结束时保存,面临丢失风险的数据会太多;逐点单独写入,又会增加存储操作。检查点保存是两者之间的折中。

发热会改变记录策略,但不会推迟保存

Orphie 会监听操作系统的温度警告。在 Android 上,这种应对方式适用于 Android 10 及更新版本;旧版本仍使用正常的记录策略。

手机报告严重发热时,记录策略会增大保留点之间的距离。达到危急温度等级时,允许的间距会进一步增大。这会减少保留下来的路线细节,是我们需要明确说明的取舍。

应对发热,但不推迟检查点保存

手机报告发热
保留点之间的间距增大
检查点保存不会因发热而推迟
这是对手机温度警告的应对方式,不是防止过热的承诺。在 iPhone 上,改变的是接受哪些点,而不是直接设置 GPS 硬件功耗。

我们把这项决定与保存记录分开处理。温度警告不会给检查点写入增加延迟。手机温度过高时,后台工作可能被中断;如果推迟保存,就会让更多尚未完成的记录面临丢失风险。

这些措施都不能防止阳光照射、充电或其他应用造成的过热。它们让记录功能能够根据手机的状态作出调整。

有些工作不必在行驶中进行

Orphie 的行驶画面没有实时移动的路线地图。结束出车后,你可以查看路线;记录功能不需要在整段行程中反复重绘地图。

城市名称查询也会等到点“结束出车”后才进行,而且只有在你启用该选项时才会查询。记录路线不需要为每个点查找地址。启用后,端点位置查询使用的是 Apple 或 Google 的服务,而不是设备上的地址数据库。

我们也选择了明确的“开始出车”和“暂停”控件,而不是全天自动检测驾驶。这意味着你需要记得开始记录。相应地,Orphie 不需要在记录时段之外监测你的位置,来判断工作是否已经开始。

“暂停”会关闭 Orphie 的定位记录。在记录中点“结束出车”后,会有一段短暂的继续记录时间,最长十分钟,或直到连续停车满两分钟,以先达到的条件为准。“保存出车”会关闭记录,丢弃这段临时记录的额外路段,保留结束当时的记录。暂停时点“结束出车”,定位保持关闭。出车指南说明了这些控件。

我们仍需测量的部分

这些是我们尝试减少不必要工作的具体做法。我们还没有测量出节电百分比,因此不会给这些做法标上一个数字。

有用的测试需要在相同的驾驶条件下,测量耗电量,并检查由此得到的里程记录。如果省电是以漏掉部分路线为代价,就算耗电量下降,也不能算改进。

目前,我们可以说明实现方式及其取舍。实际测量仍有待完成。

这是关于保存记录的一般信息,不构成税务建议。有关你的报税情况,请咨询税务专业人士。

继续阅读

记录参考

  • 里程记录指南

    IRS 对里程记录的要求,附原始出处。

  • 工具

    按日期查询里程费率,比较已记录里程与总里程,并打印核对清单。

用 Orphie 记录下一次出车

在 App Store 获取 iPhone 和 iPad 版 Orphie,或在 Google Play 获取 Android 版。