前言
設(shè)備忙著執(zhí)行各種任務(wù)和各種復(fù)雜計(jì)算滔蝉,秀自拍上傳朋友圈圖片、秀直播贬蛙,設(shè)備硬件正在快速消耗電池電量來(lái)完成這些任務(wù)雨女。很明顯,你的任務(wù)處理的越復(fù)雜阳准,電量就會(huì)消耗的越多和越快,一眨眼的功夫電量就消耗完了馏臭,用戶的手機(jī)頓時(shí)變成個(gè)累贅的磚頭了野蝇,這時(shí)候用戶就會(huì)懷疑誰(shuí)(哪個(gè)app)這么耗電,把它卸了括儒!
寫(xiě)出耗電量低的應(yīng)用的關(guān)鍵是要透徹理解它的全部過(guò)程绕沈。
- 在電子編程世界,這種硬件消耗電量 來(lái)執(zhí)行任務(wù)的過(guò)程帮寻,叫做超時(shí)電流消耗乍狐,
- 任何電子編程專(zhuān)業(yè)的人都會(huì)告訴你,你的設(shè)備的各項(xiàng)活動(dòng)在相同時(shí)間內(nèi)固逗,消耗的電量是不同的浅蚪。
- 比如,很多手機(jī)號(hào)稱(chēng)待機(jī)好幾天烫罩,這個(gè)確實(shí)是真的惜傲,不過(guò)就是使用飛行模式放在家里什么都不干,確實(shí)可以甚至可以堅(jiān)持10多天贝攒。
- 但是我們一旦使用它盗誊,比如使用蜂窩式無(wú)線數(shù)據(jù)交換(3G4G)、屏幕保持喚醒狀態(tài)等。
- 作為開(kāi)發(fā)者哈踱,我們很想知道我的應(yīng)用執(zhí)行的哪些任務(wù)消耗的電量是最多的荒适?這個(gè)問(wèn)題確實(shí)會(huì)很棘手。
電量消耗的計(jì)算與統(tǒng)計(jì)是一件麻煩而且矛盾的事情开镣,記錄電量消耗本身也是一個(gè)費(fèi)電量的事情(所以很多設(shè)備都把這個(gè)監(jiān)測(cè)電量的功能閹割掉了吻贿。)。 - 唯一可行的方案是使用第三方監(jiān)測(cè)電量的設(shè)備哑子,這樣才能夠獲取到真實(shí)的電量消耗(因?yàn)榈谌接布O(jiān)測(cè)的時(shí)候是用的自己的供電而不是用的手機(jī)的電量)舅列。
- 耗電情況,例如:打開(kāi)屏幕卧蜓,所有要使用CPU/GPU工作的動(dòng)作都會(huì)喚醒屏幕帐要,都會(huì)消耗電量。這和應(yīng)用程序喚醒設(shè)備還不一樣弥奸。
比如使用叫醒鬧鐘(wake clock)榨惠、AlarmManager、JobSchedulerAPI盛霎。
待機(jī)狀態(tài)的電量消耗:
使用喚醒屏幕后:
當(dāng)設(shè)備從休眠狀態(tài)中赠橙,被應(yīng)用程序假面喚醒時(shí),你會(huì)看到在第一次喚醒時(shí)愤炸,這里有一條電量使用高峰線
CUP喚醒時(shí)的高峰線:
接下來(lái)就是后續(xù)的一些執(zhí)行的消耗了:
- 值得注意的是當(dāng)工作完成后期揪,設(shè)備會(huì)主動(dòng)進(jìn)行休眠,這非常重要规个,在不使用或者很少使用的情況下凤薛,長(zhǎng)時(shí)間保持屏幕喚醒會(huì)迅速消耗電池的電量浊猾。
- 另外一種羹呵,蜂窩式無(wú)線也是耗電量非常可怕的坛怪。我出門(mén)就經(jīng)常這樣干墅拭,當(dāng)我發(fā)現(xiàn)手機(jī)快沒(méi)電的時(shí)候活玲,
我把蜂窩無(wú)線關(guān)了,留著緊急情況自己可以主動(dòng)打電話谍婉,這個(gè)很有用 可以延長(zhǎng)2小時(shí)的使用哦舒憾。
蜂窩式無(wú)線:
- 當(dāng)設(shè)備通過(guò)無(wú)線網(wǎng)發(fā)送數(shù)據(jù)的時(shí)候,為了使用硬件屡萤,這里會(huì)出現(xiàn)一個(gè)喚醒好點(diǎn)高峰珍剑。
接下來(lái)還有一個(gè)高數(shù)值,這是發(fā)送數(shù)據(jù)包消耗的電量死陆,
然后接受數(shù)據(jù)包也會(huì)消耗大量電量 也看到一個(gè)峰值招拙。 - 所以我們指導(dǎo)了唧瘾,開(kāi)啟無(wú)線模式這個(gè)過(guò)程非常耗電,那么硬件這塊為了防止頻繁開(kāi)啟關(guān)閉耗電别凤,采取了一個(gè)無(wú)奈的辦法饰序,會(huì)在一個(gè)小段時(shí)間內(nèi)保持開(kāi)啟模式,防止短時(shí)間內(nèi)還有數(shù)據(jù)包需要接收规哪。這些數(shù)據(jù)非常有用求豫,可是 不是所有開(kāi)發(fā)者都有這個(gè)第三方設(shè)備跟蹤。但是使用Android L版本就可以利用到新的一系列的工具來(lái)優(yōu)化應(yīng)用程序的耗電诉稍。(這里顯然不要考慮兼容性問(wèn)題吧蝠嘉,我只是想測(cè)電量消耗問(wèn)題,同一款A(yù)PP在不同版本上耗電情況應(yīng)該不會(huì)有太大影響杯巨。)
Battery Historian
電量使用記錄分析工具蚤告。
通過(guò)ADB獲取的數(shù)據(jù),通過(guò)使用Battery Historian工具分析處理后服爷,得到的html結(jié)果文件杜恰,用瀏覽器可以直接查看的。
Battery Historian工具是一個(gè)獨(dú)立的Python開(kāi)源腳本仍源,可以從gitbub上下載心褐。
請(qǐng)看詳細(xì)文檔:《battery-historian工具使用》