最佳化應用程式的耗電量

本文說明如何最佳做法,協助您在使用 Navigation SDK 建構的行動導航應用程式中,將耗電量最佳化。同時,我們也說明採用這些做法時應考量的優缺點。本文件尤其著重於下列內容:

  • 高耗電量的來源,由高到低排名。
  • 用於最佳化耗電量的策略,依序排列,先從影格速率開始。
  • 使用者策略:教導應用程式使用者如何在導覽時管理裝置用量。

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

視自身情況而定,您的應用程式使用者可能會長時間執行導航指南。舉例來說,司機和貨運業者可以在不尋常的領域工作,完成作業。在這些情況下,他們會大量仰賴應用程式的即時導引。這會造成一些常見問題:

  • 電池耗電與充電情況。使用大量導航可能會使裝置電池耗電速度超出預期。雖然許多使用者都能在車內為裝置充電,藉此解決這個問題,但機車駕駛無法解決。
  • 裝置因過熱而節流:即便使用者持續為裝置充電,也可能會出現問題。長時間耗電量高可能會導致裝置溫度升高,進而導致過熱保護,進而導致效能下降。

即時路線導航應用程式需要仰賴電源的功能 (例如螢幕、GPS 和使用行動通信基地台的無線電通訊),因此最佳做法是最佳化行動應用程式的耗電量。此外,您也應該考量目標對象的電力使用需求,以便在效能與最佳化耗電量之間做出適當取捨。

哪些項目消耗最多功率?

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

  • 畫面顯示
  • 最新位置

畫面顯示

螢幕算繪通常會導致行動導航應用程式的耗電量最高。裝置每次在畫面中繪製地圖和其他 UI 元素時,都會依賴 GPU 和 CPU 處理作業。同樣地,當使用者長時間讓螢幕保持開啟時,螢幕也會耗用較多電力。

在某個程度上,預期仰賴地圖可導航的駕駛或乘客會耗用大量電力,尤其是如果駕駛人持續使用應用程式好幾個小時的話。在這種情況下,應用程式也會在螢幕上提高算繪率,因為地圖會即時更新。在某些情況下,螢幕可能會幾乎持續重新繪製,特別是當使用者只是從某個位置開車前往某個位置時。

最新位置

除了畫面轉譯外,另外兩個導覽活動也會耗用裝置電力:

  • 無線電基地台和 GPS 使用情形
  • 位置更新和分享,例如提供預計到達時間或回報車隊中的車輛位置。

GPS 和基地台通訊都依賴飢餓的啟動行動:GPS 必須找到衛星和行動無線電通訊,必須與基地台交涉並建立連線。基於上述原因,即使儲存格無線電會在 20 至 30 秒內持續運作,以盡可能降低啟動成本,但在瀏覽期間仍會持續執行。作業系統控制這些設定,而這些設定無法在應用程式中輕鬆設置。

位置更新作業的耗電量會因不可預測的因素而異。舉例來說,裝置和行動網路基地台之間的距離會決定電力用量,因為裝置會使用繼續導航所需的最低訊號,避免切換基地台。因此,在連線品質不佳的地方導航裝置會使用比靠近基地台的更多用電。此外,有些應用程式可能會將位置更新提供給中央機群管理服務,因此需要與伺服器通訊才能完成。

最佳化應用程式的耗電量

要最佳化導航應用程式的耗電量,有一個難題,就是這類應用程式會大量仰賴耗電資源,因此能在不權衡使用裝置等的情況下,限制了減輕影響的選項。本節提供在最佳化應用程式時可以採取的方法,按影響程度由高到低排序。

變更畫面更新率

畫面會根據畫面更新率,更新所顯示的內容。影格速率通常以每秒影格數 (FPS) 為單位。由於螢幕轉譯會大量使用 CPU 或 GPU,您可以降低影格速率以節省耗電量。

降低影格速率的取捨是螢幕畫面算繪的流暢度,尤其在地圖頻繁更新時更是如此。如果地圖放大以顯示詳盡細節、使用者以高速移動,或是以大範圍變更速度或方向,這可能就最明顯。

如要進一步瞭解如何修改影格速率,請參閱 Android 媒體開發人員中心開發人員說明文件的「影格速率」一節。

雖然您無法控制使用者設定裝置螢幕亮度或螢幕保持開啟的時間,但您還是可以提供「沒有」地圖的導航功能選項。這能讓使用者選擇該選項以節省電力。舉例來說,如果司機經常在相同街區工作,可能就不需要頻繁使用地圖做為指引。如要啟用沒有地圖的導覽功能,請在 Navigation SDK 中設定目的地開始指引,但不顯示地圖。

如要隱藏導覽 UI,請勿新增 NavigationViewSupportNavigationFragment;如果您已完成這項操作,請移除新增導覽 UI 的程式碼。以下程式碼已從 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,請參閱「修改導覽 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 整理工具中的「電池用量」窗格) 會測量耗電量,但您可能難以移除背景程序的影響,或設定用於評估的效能基準。在某些情況下,裝置限制可能會導致無法存取必要資料。

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