Android Note - 電量優化

NianyiYang發表於2019-05-01

我們注意到,現在但凡每個手機廠商開新品釋出會,關於電量的內容永遠是佔了重要的篇幅。現在的智慧手機雖然效能遠非早前功能機時代的手機可比,但是電量損耗反而好像是越來越大了?這有點 “日益增長的使用需要和不平衡不充分的電池電量技術發展之間的矛盾” 一樣的感覺,是一個使用者非常關注的問題。

在硬體上,我們作為軟體開發者可能是愛莫能助;但是在應用層面上來說,我們能做的事情很多。下面就簡單講一下開發時要注意的一些地方。


耗電場景

具體到開發中,我們會碰到的耗電場景主要有下面一些場景。

  1. 螢幕點亮,元件開始工作,介面開始渲染流程。因為喚醒螢幕讓螢幕亮起本身會消耗大量的電能。
  2. 使用蜂窩資料。這一塊耗電是因為手機是通過 “射頻” 模組與外界通訊的,而這個模組也是手機中消耗電能的大戶。
  3. 使用高精度的位置資訊。這個也是電量消耗的大頭了,早幾年系統底層優化不夠完善的時候,使用 GPS 一會兒手機甚至會發熱發燙。

耗電優化

知道了耗電場景,那我們就可以有針對性地對這些場景進行優化了。

  1. 螢幕的渲染及CPU的長時間執行是耗電的主要因素,在做記憶體優化、渲染優化、程式碼優化的時候,也能幫助應用進行電量優化,這都是相輔相成的。

  2. 如果可以的話,監聽手機充電狀態,並在充電時才執行一些非常耗電的操作,比如下載檔案,備份資訊,上傳日誌等。

  3. 是否保持螢幕常亮要依據場景來決定,比如地圖,閱讀類的應用;最好給使用者一個可以選擇是否需要螢幕常亮的選項。

  4. GPS 選用合適的 Location Provider,並及時登出定位監聽。有 GPS_PROVIDER,通過 GPS 來獲取地理位置的經緯度資訊;以及 NETWORK_PROVIDER,通過行動網路的基站或者 Wi-Fi 來獲取地理位置;其中的區別就不細說了。

  5. 網路優化,判斷當前網路狀況,如果無網路,則不傳送網路請求,避免太多超時重試;如果是蜂窩資料,則降低請求頻率,減少重連次數;如果有長連線,記得關掉。

  6. 使用JobScheduler執行後臺作業。JobSchedule的宗旨就是把一些不是特別緊急的任務放到更合適的時機批量處理。這樣做有兩個好處:一是避免頻繁的喚醒硬體模組,造成不必要的電量消耗;二是避免在不合適的時間(例如低電量情況下、弱網路或者行動網路情況下的)執行過多的任務消耗電量。


總結

其實電量優化這一塊的內容,往往也是我們在做其他效能優化時要注意的東西,這就要求我們在寫程式碼時,更加深入地看待問題的實質,並始終保持一個良好的編碼習慣。這樣我們就能在應用層面,給使用者帶來更好的體驗。

相關文章