咱們注意到,如今但凡每一個手機廠商開新品發佈會,關於電量的內容永遠是佔了重要的篇幅。如今的智能手機雖然性能遠非早前功能機時代的手機可比,可是電量損耗反而好像是愈來愈大了?這有點 「日益增加的使用須要和不平衡不充分的電池電量技術發展之間的矛盾」 同樣的感受,是一個用戶很是關注的問題。性能優化
在硬件上,咱們做爲軟件開發者多是心有餘而力不足;可是在應用層面上來講,咱們能作的事情不少。下面就簡單講一下開發時要注意的一些地方。網絡
具體到開發中,咱們會碰到的耗電場景主要有下面一些場景。ide
知道了耗電場景,那咱們就能夠有針對性地對這些場景進行優化了。性能
屏幕的渲染及CPU的長時間運行是耗電的主要因素,在作內存優化、渲染優化、代碼優化的時候,也能幫助應用進行電量優化,這都是相輔相成的。優化
若是能夠的話,監聽手機充電狀態,並在充電時才執行一些很是耗電的操做,好比下載文件,備份信息,上傳日誌等。編碼
是否保持屏幕常亮要依據場景來決定,好比地圖,閱讀類的應用;最好給用戶一個能夠選擇是否須要屏幕常亮的選項。日誌
GPS 選用合適的 Location Provider,並及時註銷定位監聽。有 GPS_PROVIDER,經過 GPS 來獲取地理位置的經緯度信息;以及 NETWORK_PROVIDER,經過移動網絡的基站或者 Wi-Fi 來獲取地理位置;其中的區別就不細說了。內存
網絡優化,判斷當前網絡情況,若是無網絡,則不發送網絡請求,避免太多超時重試;若是是蜂窩數據,則下降請求頻率,減小重連次數;若是有長鏈接,記得關掉。開發
使用JobScheduler執行後臺做業。JobSchedule的宗旨就是把一些不是特別緊急的任務放到更合適的時機批量處理。這樣作有兩個好處:一是避免頻繁的喚醒硬件模塊,形成沒必要要的電量消耗;二是避免在不合適的時間(例如低電量狀況下、弱網絡或者移動網絡狀況下的)執行過多的任務消耗電量。io
其實電量優化這一塊的內容,每每也是咱們在作其餘性能優化時要注意的東西,這就要求咱們在寫代碼時,更加深刻地看待問題的實質,並始終保持一個良好的編碼習慣。這樣咱們就能在應用層面,給用戶帶來更好的體驗。