駕駛討論里程記錄應用程式時,會提到耗電問題。有人描述手機發燙、得經常充電,也有人不確定行程結束後是否已停止記錄。這些是個別使用者的回報,不是受控的比較測試,但這些顧慮仍然重要。
開發 Orphie 時,我們考慮的不只是取得位置和加總里程。我們也需要決定每個位置要做多少處理、何時儲存,以及手機發熱時該如何因應。
以下是其中幾項決定。
直線路段和急彎需要不同的處理方式
里程記錄應用程式透過定位點重建你的路線。點與點相隔太遠,彎道就會變成一條切過轉角的直線。若保留手機回報的每一點微小移動,可能只是留下了定位雜訊,卻沒有多取得多少行程資訊。
Orphie 採用自適應記錄策略。它會考慮速度與方向變化,而不是整次出車都套用同一個間距規則。
溫度正常時,策略會在慢速行駛和方向改變時採用較密的間距,最小可到 15–25 公尺。在速度較快、較筆直的路段,保留的點之間可以相隔 100 公尺。
在路線變化處保留細節
這個做法有其限制。我們只能回應手機已回報的移動。間距加大,可能會失去細節。這些門檻是技術上的選擇,需要與實際行駛路線比對,並不是里程完全準確的保證。
我們使用手機的定位系統
Orphie 在 iPhone 上透過 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 的定位記錄。在記錄中點「結束出車」後,會有一小段繼續記錄的時間,最多十分鐘,或直到連續停車滿兩分鐘,以先到者為準。「儲存出車」會關閉記錄,捨棄這段暫時記下的額外路段,保留結束當下的紀錄。在暫停時點「結束出車」,定位會保持關閉。出車指南說明了這些控制項。
我們還需要量測什麼
這些是我們嘗試減少不必要工作的具體做法。我們還沒有量測出省電百分比,因此不會為這些做法標上一個數字。
有用的測試需要在相同的駕駛條件下,量測耗電量,並檢查產生的里程紀錄。如果降低耗電量的代價是漏掉部分路線,就不能算是改善。
目前,我們可以說明實作方式和其中的取捨。量測仍待完成。
這是一般紀錄保存資訊,不是稅務建議。關於你自己的申報,請諮詢稅務專業人士。

