Android電量優(yōu)化提高手機(jī)續(xù)航
正文
節(jié)能減排,從我做起。一款A(yù)ndroid應(yīng)用如果非常耗電,是一定會被主人嫌棄的。自從Android手機(jī)的主人用了你開發(fā)的app,一天下來,也沒干啥事,電就沒了。那么他就會想盡辦法找出耗電量殺手,當(dāng)他找出后,很有可能你開發(fā)的app就被無情的卸載了。為了避免這種事情發(fā)生,我們就要想想辦法讓我們的應(yīng)用不那么耗電,電都用在該用的時(shí)候和地方。
通過power_profile.xml查看各個(gè)手機(jī)硬件的耗電量
Google要求手機(jī)硬件生產(chǎn)商都要放入power_profile.xml文件到ROM里面。有些不太負(fù)責(zé)的手機(jī)生產(chǎn)商,就亂配,也沒有真正測試過。但我們還是可以大概知道耗電的硬件都有哪些。
先從ibotpeaches.github.io/Apktool/ 下載apktool反編譯工具,然后執(zhí)行adb命令,將手機(jī)framework的資源apk拉取出來。
adb pull /system/framework/framework-res.apk ./
然后我們用下載好的反編譯工具,將framework-res.apk進(jìn)行反編譯。
java -jar apktool_2.7.0.jar d framework-res.apk
apktool_2.7.0.jar換成你下載的具體的jar包名稱。 power_profile.xml文件的目錄如下:
framework-res/res/xml/power_profile.xml
<?xml version="1.0" encoding="utf-8"?> <device name="Android"> <item name="ambient.on">0.1</item> <item name="screen.on">0.1</item> <item name="screen.full">0.1</item> <item name="bluetooth.active">0.1</item> <item name="bluetooth.on">0.1</item> <item name="wifi.on">0.1</item> <item name="wifi.active">0.1</item> <item name="wifi.scan">0.1</item> <item name="audio">0.1</item> <item name="video">0.1</item> <item name="camera.flashlight">0.1</item> <item name="camera.avg">0.1</item> <item name="gps.on">0.1</item> <item name="radio.active">0.1</item> <item name="radio.scanning">0.1</item> <array name="radio.on"> <value>0.2</value> <value>0.1</value> </array> <array name="cpu.active"> <value>0.1</value> </array> <array name="cpu.clusters.cores"> <value>1</value> </array> <array name="cpu.speeds.cluster0"> <value>400000</value> </array> <array name="cpu.active.cluster0"> <value>0.1</value> </array> <item name="cpu.idle">0.1</item> <array name="memory.bandwidths"> <value>22.7</value> </array> <item name="battery.capacity">1000</item> <item name="wifi.controller.idle">0</item> <item name="wifi.controller.rx">0</item> <item name="wifi.controller.tx">0</item> <array name="wifi.controller.tx_levels" /> <item name="wifi.controller.voltage">0</item> <array name="wifi.batchedscan"> <value>.0002</value> <value>.002</value> <value>.02</value> <value>.2</value> <value>2</value> </array> <item name="modem.controller.sleep">0</item> <item name="modem.controller.idle">0</item> <item name="modem.controller.rx">0</item> <array name="modem.controller.tx"> <value>0</value> <value>0</value> <value>0</value> <value>0</value> <value>0</value> </array> <item name="modem.controller.voltage">0</item> <array name="gps.signalqualitybased"> <value>0</value> <value>0</value> </array> <item name="gps.voltage">0</item> </device>
抓到不負(fù)責(zé)任的手機(jī)生產(chǎn)商一枚,好家伙,這么多0.1,明眼人一看就知道這是為了應(yīng)付Google。盡管這樣,我們還是可以從中知道,耗電的有Screen(屏幕亮屏)、Bluetooth(藍(lán)牙)、Wi-Fi(無線局域網(wǎng))、Audio(音頻播放)、Video(視頻播放)、Radio(蜂窩數(shù)據(jù)網(wǎng)絡(luò))、Camera的Flashlight(相機(jī)閃光燈)和GPS(全球定位系統(tǒng))等。
電量殺手簡介
Screen
屏幕是非常耗電的一個(gè)硬件,不要問我為什么。屏幕主要有LCD和OLED兩種。LCD屏幕白色光線從屏幕背后的燈管發(fā)出,盡管屏幕顯示黑屏,依舊耗電,這種屏幕逐漸被淘汰,如果你翻出個(gè)早點(diǎn)的功能機(jī),或許能看到。那么大部分Android手機(jī)都是OLED的屏幕,每個(gè)像素點(diǎn)都是獨(dú)立的發(fā)光單元,屏幕黑屏?xí)r,所有像素都不發(fā)光。有必要時(shí),讓屏幕息屏很重要,當(dāng)然手機(jī)也有自動(dòng)息屏的時(shí)間設(shè)置,這個(gè)不太需要我們操心。
Radio數(shù)據(jù)網(wǎng)絡(luò)和Wi-Fi無線網(wǎng)絡(luò)
網(wǎng)絡(luò)也是非常耗電的,其中又以數(shù)據(jù)網(wǎng)絡(luò)的耗電更多于Wi-Fi的耗電。所以請盡量引導(dǎo)用戶使用Wi-Fi網(wǎng)絡(luò)使用app的部分功能,比如下載文件。
GPS
GPS也是很耗電的硬件,所以不要?jiǎng)硬粍?dòng)就請求地理位置,GPS平常是要關(guān)閉的,除非你在使用定位和導(dǎo)航等功能,這樣你的手機(jī)續(xù)航會更好。
WakeLock
如果使用了WakeLock,是可以有效防止息屏情況下的CPU休眠,但是如果不用了,你不釋放掉鎖的話,則會帶來很大的電量的開銷。
查看手機(jī)耗電的歷史記錄
// 上次拔掉電源到現(xiàn)在的耗電情況 adb shell dumpsys batterystats --unplugged
你在逗我?讓我看命令行的輸出?后面我們來使用Battery Historian的圖表進(jìn)行分析。
使用Battery Historian分析手機(jī)耗電量
安裝Docker
Docker下載網(wǎng)址 docs.docker.com/desktop/ins…
使用Docker容器編排
docker run -p 9999:9999 gcr.io/android-battery-historian/stable:3.0 --port 9999
獲取bugreport文件
Android7.0及以上
adb bugreport bugreport.zip
Android6.0及以下
adb bugreport > bugreport.txt
上傳bugreport文件進(jìn)行分析
在瀏覽器地址欄輸入 http://localhost:9999
點(diǎn)擊Browse按鈕并上傳bugreport.zip或bugreport.txt生成分析圖表。
我們可以通過時(shí)間軸來分析應(yīng)用當(dāng)下的電池使用情況,比較耗電的是哪部分硬件。
使用JobScheduler來合理執(zhí)行后臺任務(wù)
JobScheduler是Android5.0版本推出的API,允許開發(fā)者在符合某些條件時(shí)創(chuàng)建執(zhí)行在后臺的任務(wù)。比如接通電源的情況下才執(zhí)行某些耗電量大的操作,也可以把一些不緊急的任務(wù)在合適的時(shí)候批量處理,還可以避開低電量的情況下執(zhí)行某些任務(wù)。
以上就是Android電量優(yōu)化手機(jī)續(xù)航的詳細(xì)內(nèi)容,更多關(guān)于Android電量優(yōu)化的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android開發(fā)中的Surface庫及用其制作播放器UI的例子
這篇文章主要介紹了Android開發(fā)中的Surface庫及用其制作播放器界面的例子,利用SurfaceView和SurfaceHolder可以高效地繪制和控制圖形界面,需要的朋友可以參考下2016-04-04Android實(shí)現(xiàn)頂部底部雙導(dǎo)航界面功能
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)頂部\底部雙導(dǎo)航界面功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09Android編程之canvas繪制各種圖形(點(diǎn),直線,弧,圓,橢圓,文字,矩形,多邊形,曲線,圓角矩形)
這篇文章主要介紹了Android編程之canvas繪制各種圖形的方法,涉及Android使用Canvas類中常用繪圖方法的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-12-12Android實(shí)現(xiàn)微信首頁左右滑動(dòng)切換效果
這篇文章主要介紹了Android實(shí)現(xiàn)微信首頁左右滑動(dòng)切換效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09從源代碼分析Android Universal ImageLoader的緩存處理機(jī)制
這篇文章主要介紹了從源代碼分析Android Universal ImageLoader的緩存處理機(jī)制 的相關(guān)資料,需要的朋友可以參考下2016-01-01ListView實(shí)現(xiàn)頂部和底部內(nèi)容指示器的方法
這篇文章主要介紹了ListView實(shí)現(xiàn)頂部和底部內(nèi)容指示器的方法,需要的朋友可以參考下2015-09-09Bootstrap 下拉菜單.dropdown的具體使用方法
這篇文章主要介紹了Bootstrap 下拉菜單.dropdown的具體使用方法,詳細(xì)講解下拉菜單的交互,有興趣的可以了解一下2017-10-10Android編程基礎(chǔ)之Menu功能菜單設(shè)計(jì)實(shí)例
這篇文章主要介紹了Android編程基礎(chǔ)之Menu功能菜單,結(jié)合實(shí)例形式分析了基本的Menu功能菜單原理、定義與響應(yīng)機(jī)制,需要的朋友可以參考下2016-10-10