我們注意到,現(xiàn)在但凡每個手機(jī)廠商開新品發(fā)布會,關(guān)于電量的內(nèi)容永遠(yuǎn)是占了重要的篇幅±阆荩現(xiàn)在的智能手機(jī)雖然性能遠(yuǎn)非早前功能機(jī)時代的手機(jī)可比,但是電量損耗反而好像是越來越大了摹菠?這有點(diǎn) “日益增長的使用需要和不平衡不充分的電池電量技術(shù)發(fā)展之間的矛盾” 一樣的感覺盒卸,是一個用戶非常關(guān)注的問題。
在硬件上次氨,我們作為軟件開發(fā)者可能是愛莫能助蔽介;但是在應(yīng)用層面上來說,我們能做的事情很多煮寡。下面就簡單講一下開發(fā)時要注意的一些地方虹蓄。
耗電場景
具體到開發(fā)中,我們會碰到的耗電場景主要有下面一些場景幸撕。
- 屏幕點(diǎn)亮薇组,組件開始工作,界面開始渲染流程坐儿。因?yàn)閱拘哑聊蛔屍聊涣疗鸨旧頃拇罅康碾娔堋?/li>
- 使用蜂窩數(shù)據(jù)律胀。這一塊耗電是因?yàn)槭謾C(jī)是通過 “射頻” 模塊與外界通信的,而這個模塊也是手機(jī)中消耗電能的大戶挑童。
- 使用高精度的位置信息累铅。這個也是電量消耗的大頭了,早幾年系統(tǒng)底層優(yōu)化不夠完善的時候站叼,使用 GPS 一會兒手機(jī)甚至?xí)l(fā)熱發(fā)燙娃兽。
耗電優(yōu)化
知道了耗電場景,那我們就可以有針對性地對這些場景進(jìn)行優(yōu)化了尽楔。
屏幕的渲染及CPU的長時間運(yùn)行是耗電的主要因素投储,在做內(nèi)存優(yōu)化、渲染優(yōu)化阔馋、代碼優(yōu)化的時候玛荞,也能幫助應(yīng)用進(jìn)行電量優(yōu)化,這都是相輔相成的呕寝。
如果可以的話勋眯,監(jiān)聽手機(jī)充電狀態(tài),并在充電時才執(zhí)行一些非常耗電的操作下梢,比如下載文件客蹋,備份信息,上傳日志等孽江。
是否保持屏幕常亮要依據(jù)場景來決定讶坯,比如地圖,閱讀類的應(yīng)用岗屏;最好給用戶一個可以選擇是否需要屏幕常亮的選項(xiàng)辆琅。
GPS 選用合適的 Location Provider漱办,并及時注銷定位監(jiān)聽。有 GPS_PROVIDER婉烟,通過 GPS 來獲取地理位置的經(jīng)緯度信息娩井;以及 NETWORK_PROVIDER,通過移動網(wǎng)絡(luò)的基站或者 Wi-Fi 來獲取地理位置隅很;其中的區(qū)別就不細(xì)說了撞牢。
網(wǎng)絡(luò)優(yōu)化,判斷當(dāng)前網(wǎng)絡(luò)狀況叔营,如果無網(wǎng)絡(luò)屋彪,則不發(fā)送網(wǎng)絡(luò)請求,避免太多超時重試绒尊;如果是蜂窩數(shù)據(jù)畜挥,則降低請求頻率,減少重連次數(shù)婴谱;如果有長連接蟹但,記得關(guān)掉。
使用JobScheduler執(zhí)行后臺作業(yè)谭羔。JobSchedule的宗旨就是把一些不是特別緊急的任務(wù)放到更合適的時機(jī)批量處理华糖。這樣做有兩個好處:一是避免頻繁的喚醒硬件模塊,造成不必要的電量消耗瘟裸;二是避免在不合適的時間(例如低電量情況下客叉、弱網(wǎng)絡(luò)或者移動網(wǎng)絡(luò)情況下的)執(zhí)行過多的任務(wù)消耗電量。
總結(jié)
其實(shí)電量優(yōu)化這一塊的內(nèi)容话告,往往也是我們在做其他性能優(yōu)化時要注意的東西兼搏,這就要求我們在寫代碼時,更加深入地看待問題的實(shí)質(zhì)沙郭,并始終保持一個良好的編碼習(xí)慣佛呻。這樣我們就能在應(yīng)用層面,給用戶帶來更好的體驗(yàn)病线。