最佳化應用程式的耗電量

本文將說明如何在使用 Navigation SDK 建構的行動導航應用程式中,最佳化電力消耗的最佳做法。同時說明採用這些做法時應考量的取捨。本文件特別涵蓋以下內容:

  • 耗電量高的原因,由高到低排序。
  • 策略:按重要性排序的電力消耗最佳化策略,從影格速率開始。
  • 使用者策略:教導應用程式使用者如何在瀏覽時管理裝置用量。

為什麼要最佳化導航應用程式?

視情況而定,應用程式使用者可能會長時間執行導航指引。舉例來說,駕駛和快遞貨運服務人員可能需要長時間工作,在陌生的地點完成任務。在這種情況下,他們會大量依賴應用程式內的即時路線指引。這會導致一些常見問題:

  • 電池耗電量和充電器供應情形。大量使用導航功能可能會導致裝置電池耗電速度比預期更快。雖然許多使用者可以在車上為裝置充電,但二輪車駕駛無法這麼做。
  • 裝置因過熱而降速。即使是持續為裝置充電的使用者,也可能會遇到問題。長時間高耗電量可能會導致裝置過熱,進而導致熱節流並隨後效能降低。

即時路線導航應用程式需要大量電力的功能,例如螢幕、GPS 和與基地台的無線電通訊,因此最佳做法是盡量減少行動應用程式的電力消耗。此外,您也應考量目標對象的電力消耗需求,以便在效能和最佳化電力消耗之間取得適當的平衡。

哪些項目消耗最多電力?

本節將與高耗電量相關的應用程式內活動分為兩類:

  • 螢幕轉譯
  • 最新位置

螢幕轉譯

在行動導航應用程式中,螢幕轉譯通常會導致耗電量最高。裝置每次在螢幕上繪製地圖和其他 UI 元素時,都需要 GPU 和 CPU 處理。同樣地,如果使用者讓螢幕長時間開啟,也會耗費更多電力。

在某種程度上,如果駕駛或乘客依賴顯示地圖來導航,則會耗用大量電力,特別是如果他們持續使用應用程式好幾個小時。在這種情況下,應用程式也會在螢幕上執行更高的算繪速率,因為地圖會即時更新。在某些情況下,螢幕幾乎可以持續重繪,尤其是當使用者不停地從一個地點開車到另一個地點時。

最新位置

除了螢幕轉譯作業之外,還有兩種導覽活動會耗用裝置電力:

  • 無線電發射塔和 GPS 用量
  • 位置更新和分享,例如提供預計到達時間,或回報車隊中車輛的位置。

GPS 和行動無線電通訊都需要耗電的啟動作業:GPS 必須找到衛星,行動無線電必須與基地台協商並建立連線。基於這些原因,這些服務在導航期間會持續運作,即使行動無線電會在 20 到 30 秒內保持啟用狀態,以盡量降低啟動成本,這些設定由作業系統控管,您無法輕易在應用程式中設定。

對於位置更新,電力消耗量會因不可預測的因素而有所不同。舉例來說,裝置與行動基地台之間的距離會決定耗電量,因為裝置會使用最少信號繼續導航,以免切換基地台。因此,在連線品質不佳的區域中導航的裝置,會比靠近基地台的裝置消耗更多電力。此外,某些應用程式可能會與中央車隊管理服務分享位置更新資訊,因此需要與伺服器通訊才能完成這項操作。

最佳化應用程式的耗電量

在導航應用程式中,由於這些應用程式高度仰賴耗電資源,因此在沒有做出妥協 (例如限制螢幕使用情形) 的情況下,您無法選擇減輕影響。本節列出可在應用程式最佳化時採取的做法,依影響程度由高至低排序。

變更影格速率

螢幕會以稱為影格速率的頻率更新顯示內容。影格速率的測量單位通常為每秒影格數 (FPS)。由於螢幕算繪會大量使用 CPU 或 GPU,因此您可以降低影格速率來節省耗電量。

降低影格率的代價是,螢幕算繪可能會變得不夠流暢,尤其是地圖經常更新的情況。當您縮放地圖以顯示詳細資訊、使用者以高速行駛,或大幅變更速度或方向時,這項問題可能會變得最明顯。

如要進一步瞭解如何修改影格速率,請參閱 Android Media Dev Center 開發人員文件中的「影格速率」一節。

雖然您無法控制使用者如何設定裝置螢幕亮度,或螢幕開啟的時間長度,但您可以提供導航指引的選項,且不必使用地圖。這樣一來,使用者就能選擇該選項來節省電力。舉例來說,如果駕駛者經常在同一個社區工作,可能就不需要經常使用地圖導航。如要啟用不顯示地圖的導航功能,請在 Navigation SDK 中設定目的地開始指引,但不要顯示地圖。

如要隱藏導覽 UI,請勿新增 NavigationViewSupportNavigationFragment,如果您已新增這些元素,請移除新增相關程式碼的程式碼。下列程式碼是從 Navigation SDK Android 示範應用程式修改而來,並說明如何使用註解來移除新增導覽 UI 的程式碼:

//Obtain a reference to the NavigationFragment
//setContentView(R.layout.activity_nav_fragment);
//mNavFragment = (SupportNavigationFragment)   getSupportFragmentManager().findFragmentById(R.id.navigation_fragment);

Navigation SDK 會持續更新路線定位位置、預估抵達時間和剩餘行程距離,應用程式仍可訂閱駕駛者行進過程中 SDK 觸發的所有事件。這並不適用於所有用途,如果駕駛人需要查看地圖並遵循視覺導引,這項建議就不適用。下列螢幕截圖並列比較在導航期間切換地圖檢視畫面的情況。

試用版應用程式執行中,地圖檢視畫面可見。
圖 1.Navigation SDK iOS 示範應用程式,顯示 Data Back 示範
執行試用版應用程式,但未顯示地圖檢視畫面。
圖 2.試用版應用程式執行時,沒有顯示地圖檢視畫面。請注意,剩餘時間和距離,以及路線修正位置仍在更新中。

使用深色地圖樣式

建議您設定地圖樣式,以便使用深色主題,減少在螢幕上算繪地圖所需的能源。

Navigation SDK 會使用 Google Maps SDK for Android 算繪地圖,其中包含可為應用程式中任何非導航地圖檢視畫面設定樣式的選項。導航檢視畫面也支援強制使用深色模式。由於螢幕類型不同,這項功能對每部裝置的影響可能不盡相同,但在某些情況下確實可節省電力。近期研究發現,在某些螢幕上,深色模式可節省的電量取決於螢幕的初始亮度。舉例來說,如果螢幕亮度已調整為最大值的 30% 至 50%,開啟深色模式可節省的電量,會比將螢幕亮度設為最大值時還要多。在應用程式中使用深色模式時,請務必考量這項因素,因為節省的電量會與使用者設定的螢幕亮度有關。

如要進一步瞭解如何修改 Navigation UI,請參閱「修改 Navigation UI」。

在 iPhone 15 Pro 上執行 Navigation SDK 的螢幕截圖,使用深色地圖樣式。
圖 3.使用深色地圖樣式設定的 Navigation SDK

如要為地圖建立深色樣式,請使用 MapStyleOptions 物件,並搭配 JSON 樣式,代表您選擇的深色地圖樣式。您可以使用舊版樣式編輯器 (位於 https://mapstyle.withgoogle.com/) 建立舊版 JSON 樣式。

變更 GPS 位置更新頻率

在考量裝置傳送位置更新所耗用的電量時,請著重於位置更新的頻率,而非傳輸時傳送的資料量。

您無法在 Navigation SDK 中直接控制這項功能,但如果您的 Android 應用程式會獨立要求位置資訊,則應參考 Android 開發人員文件中「為電池最佳化位置資訊」一文的建議。使用非 GPS 位置來源 (行動網路和 Wi-Fi) 時,也適用相同的建議。

讓使用者熟悉整套服務

應用程式的使用者可能想知道如何最佳化耗電量。為協助使用者減少應用程式的耗電量,請建議使用者採取下列做法:

  • 鎖定手機
  • 將導航應用程式置於背景
  • 盡量在沒有地圖的情況下使用導航功能
  • 降低螢幕亮度,方法是使用 OLED 和 AMOLED 螢幕的深色模式,或啟用自動調整亮度
  • 保持裝置涼爽
  • 連線至車內 Wi-Fi (如有)
請參閱「充分發揮 Android 裝置電池效能」,瞭解如何延長 Android 裝置的電池續航力。請注意,這項建議包含可能會降低導航應用程式效能的動作,詳情請參閱本指南的「最佳化應用程式的電力使用量」一節。

測量耗電量

您可以使用專業級工具來測量耗電量,但這類工具通常很難取得,而且價格不菲。應用程式和 IDE 剖析工具 (例如 Android Studio 中的電源分析器XCode Organizer 中的電池用量資訊窗格) 可評估耗電量,但很難移除背景程序的影響,或設定效能基準以供評估。在某些情況下,裝置限制可能會導致無法存取必要資料。

您可以使用特殊用途的電源監控硬體,並修改電池連線設定,此外,市面上也有商業產品和服務可協助您完成這項工作。請注意,以這種方式修改裝置可能會導致裝置保固失效。