返回部落格

我們如何嘗試降低里程記錄的耗電量

自適應記錄、批次儲存,以及因應手機發熱。看看 Orphie 背後的技術選擇、其中的取捨,以及我們還需要量測的部分。

示意圖:路線上的點在彎道處較密,在直線路段較疏,旁邊是一支手機和成組的紀錄。

駕駛討論里程記錄應用程式時,會提到耗電問題。有人描述手機發燙、得經常充電,也有人不確定行程結束後是否已停止記錄。這些是個別使用者的回報,不是受控的比較測試,但這些顧慮仍然重要。

開發 Orphie 時,我們考慮的不只是取得位置和加總里程。我們也需要決定每個位置要做多少處理、何時儲存,以及手機發熱時該如何因應。

以下是其中幾項決定。

直線路段和急彎需要不同的處理方式

里程記錄應用程式透過定位點重建你的路線。點與點相隔太遠,彎道就會變成一條切過轉角的直線。若保留手機回報的每一點微小移動,可能只是留下了定位雜訊,卻沒有多取得多少行程資訊。

Orphie 採用自適應記錄策略。它會考慮速度與方向變化,而不是整次出車都套用同一個間距規則。

溫度正常時,策略會在慢速行駛和方向改變時採用較密的間距,最小可到 15–25 公尺。在速度較快、較筆直的路段,保留的點之間可以相隔 100 公尺。

在路線變化處保留細節

慢速行駛與轉彎較密的點間距
較快、較筆直的路段較疏的點間距
這是記錄策略的示意圖,不是實際量測的行程。點間距隨速度和方向改變;手機尚未回報的轉彎,策略無法預先得知。

這個做法有其限制。我們只能回應手機已回報的移動。間距加大,可能會失去細節。這些門檻是技術上的選擇,需要與實際行駛路線比對,並不是里程完全準確的保證。

我們使用手機的定位系統

Orphie 在 iPhone 上透過 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 版。