司机讨论里程记录应用时,常会提到耗电问题。有人说手机发热、需要频繁充电,也有人不确定行程结束后应用是否停止了记录。这些是个人反馈,不是受控对比测试,但这些顾虑值得重视。
开发 Orphie 时,我们考虑的不只是获取位置和累计里程。我们还需要决定,每个位置要经过多少处理、何时保存,以及手机发热时该怎么做。
下面介绍其中的一些选择。
直路和急弯需要不同的处理方式
里程记录应用依靠定位点还原路线。点之间相隔太远,弯道就会变成一条切过弯角的直线。如果手机报告的每一点微小移动都保留下来,可能只是留下了定位噪声,并没有增加多少有用的行程信息。
Orphie 使用自适应记录策略。它会考虑速度和方向变化,而不是整次出车都使用同一种点间距规则。
温度正常时,策略会在慢速行驶和方向变化时采用较密的点间距,最小可到 15–25 米。在速度较快、较直的路段,保留的点之间可以相隔 100 米。
在路线变化处保留细节
这种方法有局限。我们只能对手机已经报告的移动作出反应。点间距变大,可能会丢失细节。这些阈值是技术上的选择,需要与实际行驶路线对照检查,并不保证里程记录完全准确。
我们使用手机的定位系统
在 iPhone 上,Orphie 通过 Apple 的 Core Location 接收后台位置更新;在 Android 上,则使用 Google 的融合定位服务。位置的提供由操作系统管理。Orphie 处理收到的更新,不会在自己的轮询循环里反复请求当前位置。
两个平台允许我们控制的部分不同。在 Android 上,记录策略会影响请求的位置更新间隔和最小移动距离。在 iPhone 上,我们使用 Apple 面向驾车场景的位置更新,并将策略应用于我们接受的定位点。
这个区别很重要。在 iPhone 上保留较少的点,并不意味着我们已经指示 GPS 硬件减少唤醒次数。我们能控制自己的处理工作,但不应声称拥有平台并未提供的硬件控制能力。
我们批量保存定位点
接收位置和将位置写入存储是两项不同的工作。如果每个点都通过单独的数据库事务保存,就会产生重复工作。
Orphie 会先将接受的点放入缓冲区,再一起保存。记录过程中,每当接受一个新点,如果缓冲区已有 50 个点,或其中最早尚未保存的点已存在至少 60 秒,就会触发一次检查点保存。
先汇集定位点,再写入存储
50 个点,或最早的点已存在至少 60 秒
如果一段时间没有接受新的点,缓冲区可能会更久未保存。停车以及操作记录控件时,也有保存的机会。
批量保存有代价。如果应用在写入完成前突然终止,尚未保存的点可能丢失。只在出车结束时保存,面临丢失风险的数据会太多;逐点单独写入,又会增加存储操作。检查点保存是两者之间的折中。
发热会改变记录策略,但不会推迟保存
Orphie 会监听操作系统的温度警告。在 Android 上,这种应对方式适用于 Android 10 及更新版本;旧版本仍使用正常的记录策略。
手机报告严重发热时,记录策略会增大保留点之间的距离。达到危急温度等级时,允许的间距会进一步增大。这会减少保留下来的路线细节,是我们需要明确说明的取舍。
应对发热,但不推迟检查点保存
我们把这项决定与保存记录分开处理。温度警告不会给检查点写入增加延迟。手机温度过高时,后台工作可能被中断;如果推迟保存,就会让更多尚未完成的记录面临丢失风险。
这些措施都不能防止阳光照射、充电或其他应用造成的过热。它们让记录功能能够根据手机的状态作出调整。
有些工作不必在行驶中进行
Orphie 的行驶画面没有实时移动的路线地图。结束出车后,你可以查看路线;记录功能不需要在整段行程中反复重绘地图。
城市名称查询也会等到点“结束出车”后才进行,而且只有在你启用该选项时才会查询。记录路线不需要为每个点查找地址。启用后,端点位置查询使用的是 Apple 或 Google 的服务,而不是设备上的地址数据库。
我们也选择了明确的“开始出车”和“暂停”控件,而不是全天自动检测驾驶。这意味着你需要记得开始记录。相应地,Orphie 不需要在记录时段之外监测你的位置,来判断工作是否已经开始。
“暂停”会关闭 Orphie 的定位记录。在记录中点“结束出车”后,会有一段短暂的继续记录时间,最长十分钟,或直到连续停车满两分钟,以先达到的条件为准。“保存出车”会关闭记录,丢弃这段临时记录的额外路段,保留结束当时的记录。暂停时点“结束出车”,定位保持关闭。出车指南说明了这些控件。
我们仍需测量的部分
这些是我们尝试减少不必要工作的具体做法。我们还没有测量出节电百分比,因此不会给这些做法标上一个数字。
有用的测试需要在相同的驾驶条件下,测量耗电量,并检查由此得到的里程记录。如果省电是以漏掉部分路线为代价,就算耗电量下降,也不能算改进。
目前,我们可以说明实现方式及其取舍。实际测量仍有待完成。
这是关于保存记录的一般信息,不构成税务建议。有关你的报税情况,请咨询税务专业人士。

