本文件說明如何在使用 Navigation SDK 建構的行動導航應用程式中,最佳化耗電量。同時,文中也說明採用這些做法時應考量的優缺點。本文件特別涵蓋以下內容:
- 耗電量高的原因,由高到低排序。
- 策略:按重要性排序的電力消耗最佳化策略,從影格速率開始。
- 使用者策略:教導應用程式使用者如何在瀏覽時管理裝置用量。
為什麼要最佳化導航應用程式?
視情況而定,應用程式使用者可能會長時間執行導航指示。舉例來說,駕駛和快遞貨運服務人員可能需要長時間工作,在陌生的地點完成任務。在這種情況下,他們會大量依賴應用程式內的即時路線指引。這會造成一些常見問題:
- 電池耗電量和充電器供應情形。使用大量導航可能會使裝置電池耗電速度超出預期。雖然許多使用者可以在車上為裝置充電,但二輪車駕駛無法這麼做。
- 裝置因過熱而降速。即使是持續為裝置充電的使用者,也可能會遇到問題。長時間耗電量高可能會導致裝置溫度升高,進而導致過熱保護,進而導致效能下降。
即時路線導航應用程式需要仰賴電源的功能 (例如螢幕、GPS 和使用行動通信基地台的無線電通訊),因此最佳做法是最佳化行動應用程式的耗電量。此外,您也應該考量目標對象的電力使用需求,以便在效能與最佳化耗電量之間做出適當取捨。
哪些項目消耗最多電力?
本節將與高耗電量相關的應用程式內活動分為兩類:
- 畫面顯示
- 最新位置
螢幕轉譯
在行動導航應用程式中,螢幕轉譯通常會造成最高的耗電量。裝置每次在畫面中繪製地圖和其他 UI 元素時,都會依賴 GPU 和 CPU 處理作業。同樣地,如果使用者讓螢幕長時間開啟,也會耗費更多電力。
在某種程度上,如果駕駛或乘客依賴顯示地圖來導航,則會耗用大量電力,特別是如果他們持續使用應用程式好幾個小時。在這種情況下,應用程式也會在螢幕上執行更高的算繪速率,因為地圖會即時更新。在某些情況下,螢幕幾乎可以持續重繪,尤其是當使用者不停車從一個地點開往另一個地點時。
最新位置
除了畫面轉譯外,另外兩個導覽活動也會耗用裝置電力:
- 無線電發射塔和 GPS 用量
- 位置更新和分享,例如提供預計到達時間,或回報車隊中車輛的位置。
GPS 和行動無線電通訊都需要耗電的啟動作業:GPS 必須找到衛星,行動無線電則必須與基地台協商並建立連線。基於這些原因,這些服務在導航期間會持續運作,即使行動無線電會在 20 到 30 秒內保持運作以盡量降低啟動成本,這些設定由作業系統控管,您無法輕易在應用程式中設定。
對於位置更新,電力消耗量會因不可預測的因素而有所不同。舉例來說,裝置與行動基地台之間的距離會決定耗電量,因為裝置會使用最少信號繼續導航,以免切換基地台。因此,在連線不佳的區域中導航的裝置,會比靠近基地台的裝置消耗更多電力。此外,某些應用程式可能會與中央車隊管理服務共用位置更新資訊,因此需要與伺服器通訊才能完成這項操作。
最佳化應用程式的耗電量
在導航應用程式中,由於這些應用程式高度仰賴耗電資源,因此在沒有做出妥協 (例如限制螢幕使用情形) 的情況下,您無法選擇減輕影響。本節列出可在應用程式最佳化時採取的做法,依影響程度由高至低排序。
變更影格速率
畫面會根據畫面更新率,更新所顯示的內容。影格速率通常以每秒影格數 (FPS) 為單位。由於螢幕算繪會大量使用 CPU 或 GPU,因此您可以降低影格速率來節省耗電量。
降低影格速率的代價是,螢幕算繪可能會變得不夠流暢,尤其是地圖經常更新的情況。如果地圖放大以顯示詳細細節、使用者以高速移動,或是以大範圍變更速度或方向,這可能就最明顯。
如要進一步瞭解如何修改影格速率,請參閱 Android Media Dev Center 開發人員文件中的「影格速率」一節。
在沒有地圖的情況下導航
雖然您無法控制使用者如何設定裝置螢幕亮度,或螢幕開啟的時間長度,但您可以提供「不使用」地圖的導航指引選項。這能讓使用者選擇這個選項,以節省電力。舉例來說,如果駕駛者經常在同一個社區工作,可能就不需要經常使用地圖導航。如要啟用不顯示地圖的導航功能,請在 Navigation SDK 中設定目的地並開始指引,但不要顯示地圖。
如要隱藏導覽 UI,請勿新增 NavigationView 或 SupportNavigationFragment,如果您已這樣做,請移除新增這些項目的程式碼。下列程式碼是從 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 觸發的事件。這並不適用於所有用途,而且當駕駛人需要查看地圖和遵循視覺導航指示時,這也不是好的建議。下列螢幕截圖並列比較在導航期間切換地圖檢視畫面的情況。
使用深色地圖樣式
建議您設定地圖樣式,使用深色主題,以減少在畫面上算繪地圖所需的能源。
Navigation SDK 會使用 Google Maps SDK for Android 算繪地圖,其中包含可用於設定應用程式中任何非導航地圖檢視畫面的選項。導航檢視畫面也支援強制使用深色模式。由於螢幕類型不同,這可能不會以相同的方式影響每部裝置,但在某些情況下可以節省電力。近期研究發現,在某些螢幕上,深色模式可節省的電量取決於螢幕的初始亮度。舉例來說,如果螢幕亮度已調整為最大值的 30% 至 50%,開啟深色模式可節省的電量,會比螢幕亮度設為全亮時還要多。為應用程式使用深色模式時,請務必考量這一點,因為省電模式會因使用者設定螢幕亮度的方式而有不同。
如要進一步瞭解如何修改 Navigation UI,請參閱「修改導覽 UI」。
如要為地圖建立深色樣式,請使用 MapStyleOptions 物件,並搭配可代表您選擇的深色地圖樣式的 JSON 樣式。您可以使用舊版樣式編輯器 (位於 https://mapstyle.withgoogle.com/) 建立舊版 JSON 樣式。
變更 GPS 位置更新頻率
在考量裝置傳送位置更新所耗用的電量時,請著重於位置更新的頻率,而非傳輸時傳送的資料量。
您無法在 Navigation SDK 中直接控制這項功能,但如果您的 Android 應用程式會獨立要求位置資訊,則應參考 Android 開發人員文件中「為電池最佳化位置資訊」一文的建議。使用非 GPS 位置來源 (行動網路和 Wi-Fi) 時,也應遵守同樣的建議。
讓使用者熟悉整套服務
應用程式的使用者可能想知道如何最佳化耗電量。為協助使用者減少應用程式的耗電量,請建議使用者採取下列做法:
- 鎖定手機
- 將導航應用程式置於背景
- 盡量在沒有地圖的情況下使用導航功能
- 透過 OLED 和 AMOLED 螢幕使用深色模式,或啟用自動調整亮度功能來降低螢幕亮度
- 保持裝置涼爽
- 連線至車內 Wi-Fi (如有)
測量耗電量
你可以使用專業級工具來測量耗電量,但通常難以取得能源,或所費不貲。 應用程式和 IDE 分析工具 (例如 Android Studio 中的 Power Profiler 和 XCode Organizer 中的電池用量資訊窗格) 可評估耗電量,但很難移除背景程序的影響,或設定效能基準以供評估。在某些情況下,裝置限制可能會導致無法存取必要資料。
您可以使用特殊用途的電源監控硬體,並修改電池連線設定,此外,市面上也有商業產品和服務可協助您完成這項工作。請注意,以這種方式修改裝置可能會導致裝置保固失效。