原文-Google Maps improved download reliability by 10% using user initiated data transfer API
簡介
主要是分享 Google maps 透過 UIDT 技術提升 10% 下載可信賴度,比較基準是 Android 14 採用 UIDT,而 Android 13 的版本則無,對比後可以發現用戶在下載離線地圖的失敗率降低了超過 10%。
原文
UIDT 是 user-initiated data transfer 的簡寫,該技術在 Android 14 時推出,透過 JobScheduler API 設定 setUserInitiated 達成,可用於長時間(大於10分鐘)的網路傳輸情境,包含從伺服器下載、上傳到伺服器及透過 Wifi 的裝置間傳輸。自從 Android 14 推出此功能後,該功能的採納比例就持續上升。
Android 開發團隊針對該傳輸功能進行分析,發現前景服務以及 WorkManager API 的相關整合有一定難度,前景服務很容易在沒有網路的情況下不知道現在的傳輸狀況導致難以提升 UX,WorkManager 雖然有提供重試功能,但是遇到長時間傳輸就無法支援。
JobSheduler 目前有一些優勢:
- 可以即時處理耗時長的工作,並且不受限於 OS 的 APP 待命值區限制
- 功能通過 CTS 相容性測試,提供更好的一致性服務
- 額外支援功能,像是"僅在 wifi 傳輸運行"、"僅在設備充電時運行"
- 管理作業超時及重試
- 減低記憶體用量並且與通知功能整合的更好
雖然 JobScheduler 有不少優點,但是官方仍然建議在簡短或可中斷的後台服務採用 WorkManager。
Google Maps 團隊採用 UIDT 的主要考量是想提供跟新版 OS (Android 14 / 15)更高度相容的 API 服務,也連帶可以提升可靠性,也針對改版後進行統計,可以發現離線下載地圖的下載失敗率降低了 10%+。
如果要開始採用數據傳輸 API 可以參考:
總結
官方在 Android 15 也持續提出相關優化措施,雖然幾乎沒有對於該技術的深入研究,不過我想這樣的 API 有助於多元生態的 Android 系統提供一致性服務,但是缺點也很明顯的是相關的客製化難度就提升了。
隨著現代服務演進,健全的網路環境被視為是理所當然,多少導致了人在行動裝置上的操作耐心有限,提供離線服務可能是一個不錯的解決方案,另外是協助用戶裝置更迭的資料轉移也許也是該技術的一個可能性。