Android電量優(yōu)化提高手機續(xù)航
正文
節(jié)能減排,從我做起。一款Android應用如果非常耗電,是一定會被主人嫌棄的。自從Android手機的主人用了你開發(fā)的app,一天下來,也沒干啥事,電就沒了。那么他就會想盡辦法找出耗電量殺手,當他找出后,很有可能你開發(fā)的app就被無情的卸載了。為了避免這種事情發(fā)生,我們就要想想辦法讓我們的應用不那么耗電,電都用在該用的時候和地方。
通過power_profile.xml查看各個手機硬件的耗電量
Google要求手機硬件生產商都要放入power_profile.xml文件到ROM里面。有些不太負責的手機生產商,就亂配,也沒有真正測試過。但我們還是可以大概知道耗電的硬件都有哪些。
先從ibotpeaches.github.io/Apktool/ 下載apktool反編譯工具,然后執(zhí)行adb命令,將手機framework的資源apk拉取出來。
adb pull /system/framework/framework-res.apk ./
然后我們用下載好的反編譯工具,將framework-res.apk進行反編譯。
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>
抓到不負責任的手機生產商一枚,好家伙,這么多0.1,明眼人一看就知道這是為了應付Google。盡管這樣,我們還是可以從中知道,耗電的有Screen(屏幕亮屏)、Bluetooth(藍牙)、Wi-Fi(無線局域網)、Audio(音頻播放)、Video(視頻播放)、Radio(蜂窩數據網絡)、Camera的Flashlight(相機閃光燈)和GPS(全球定位系統(tǒng))等。
電量殺手簡介
Screen
屏幕是非常耗電的一個硬件,不要問我為什么。屏幕主要有LCD和OLED兩種。LCD屏幕白色光線從屏幕背后的燈管發(fā)出,盡管屏幕顯示黑屏,依舊耗電,這種屏幕逐漸被淘汰,如果你翻出個早點的功能機,或許能看到。那么大部分Android手機都是OLED的屏幕,每個像素點都是獨立的發(fā)光單元,屏幕黑屏時,所有像素都不發(fā)光。有必要時,讓屏幕息屏很重要,當然手機也有自動息屏的時間設置,這個不太需要我們操心。
Radio數據網絡和Wi-Fi無線網絡
網絡也是非常耗電的,其中又以數據網絡的耗電更多于Wi-Fi的耗電。所以請盡量引導用戶使用Wi-Fi網絡使用app的部分功能,比如下載文件。
GPS
GPS也是很耗電的硬件,所以不要動不動就請求地理位置,GPS平常是要關閉的,除非你在使用定位和導航等功能,這樣你的手機續(xù)航會更好。
WakeLock
如果使用了WakeLock,是可以有效防止息屏情況下的CPU休眠,但是如果不用了,你不釋放掉鎖的話,則會帶來很大的電量的開銷。
查看手機耗電的歷史記錄
// 上次拔掉電源到現在的耗電情況 adb shell dumpsys batterystats --unplugged
你在逗我?讓我看命令行的輸出?后面我們來使用Battery Historian的圖表進行分析。
使用Battery Historian分析手機耗電量
安裝Docker
Docker下載網址 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文件進行分析
在瀏覽器地址欄輸入 http://localhost:9999

點擊Browse按鈕并上傳bugreport.zip或bugreport.txt生成分析圖表。

我們可以通過時間軸來分析應用當下的電池使用情況,比較耗電的是哪部分硬件。
使用JobScheduler來合理執(zhí)行后臺任務
JobScheduler是Android5.0版本推出的API,允許開發(fā)者在符合某些條件時創(chuàng)建執(zhí)行在后臺的任務。比如接通電源的情況下才執(zhí)行某些耗電量大的操作,也可以把一些不緊急的任務在合適的時候批量處理,還可以避開低電量的情況下執(zhí)行某些任務。
以上就是Android電量優(yōu)化手機續(xù)航的詳細內容,更多關于Android電量優(yōu)化的資料請關注腳本之家其它相關文章!
相關文章
Android view更改背景資源與padding消失的問題解決辦法
這篇文章主要介紹了Android view更改背景資源與padding消失的問題解決辦法的相關資料,需要的朋友可以參考下2017-04-04
Android Studio如何為Activity添加自定義注解信息
好久沒用寫文章了,今天給大家分享Android Studio如何為Activity添加自定義注解信息,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2021-06-06
360瀏覽器文本框獲得焦點后被android軟鍵盤遮罩該怎么辦
最近接了個項目,項目需求是這樣的,站點上篩選按鈕點擊后彈出層(fixed),當輸入框獲取焦點以后彈出系統(tǒng)自帶的軟鍵盤,在android上十款瀏覽器挨個測試比對,發(fā)現在360瀏覽器彈出鍵盤以后獲取焦點的文本框被軟鍵盤覆蓋了,下面分享我的解決辦法2015-12-12

