Android電量優化,讓你的手機續航更持久

語言: CN / TW / HK

開啟掘金成長之旅!這是我參與「掘金日新計劃 · 2 月更文挑戰」的第 2 天,點選檢視活動詳情

節能減排,從我做起。一款Android應用如果非常耗電,是一定會被主人嫌棄的。自從Android手機的主人用了你開發的app,一天下來,也沒幹啥事,電就沒了。那麼他就會想盡辦法找出耗電量殺手,當他找出後,很有可能你開發的app就被無情的解除安裝了。為了避免這種事情發生,我們就要想想辦法讓我們的應用不那麼耗電,電都用在該用的時候和地方。

通過power_profile.xml檢視各個手機硬體的耗電量

Google要求手機硬體生產商都要放入power_profile.xml檔案到ROM裡面。有些不太負責的手機生產商,就亂配,也沒有真正測試過。但我們還是可以大概知道耗電的硬體都有哪些。

先從http://ibotpeaches.github.io/Apktool/ 下載apktool反編譯工具,然後執行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

0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.1 0.2 0.1 0.1 1 400000 0.1 0.1 22.7 1000 0 0 0 0 .0002 .002 .02 .2 2 0 0 0 0 0 0 0 0 0 0 0 0 ``` 抓到不負責任的手機生產商一枚,好傢伙,這麼多0.1,明眼人一看就知道這是為了應付Google。儘管這樣,我們還是可以從中知道,耗電的有Screen(螢幕亮屏)、Bluetooth(藍芽)、Wi-Fi(無線區域網)、Audio(音訊播放)、Video(視訊播放)、Radio(蜂窩資料網路)、Camera的Flashlight(相機閃光燈)和GPS(全球定位系統)等。

電量殺手簡介

Screen

螢幕是非常耗電的一個硬體,不要問我為什麼。螢幕主要有LCD和OLED兩種。LCD螢幕白色光線從螢幕背後的燈管發出,儘管螢幕顯示黑屏,依舊耗電,這種螢幕逐漸被淘汰,如果你翻出個早點的功能機,或許能看到。那麼大部分Android手機都是OLED的螢幕,每個畫素點都是獨立的發光單元,螢幕黑屏時,所有畫素都不發光。有必要時,讓螢幕息屏很重要,當然手機也有自動息屏的時間設定,這個不太需要我們操心。

Radio資料網路和Wi-Fi無線網路

網路也是非常耗電的,其中又以資料網路的耗電更多於Wi-Fi的耗電。所以請儘量引導使用者使用Wi-Fi網路使用app的部分功能,比如下載檔案。

GPS

GPS也是很耗電的硬體,所以不要動不動就請求地理位置,GPS平常是要關閉的,除非你在使用定位和導航等功能,這樣你的手機續航會更好。

WakeLock

如果使用了WakeLock,是可以有效防止息屏情況下的CPU休眠,但是如果不用了,你不釋放掉鎖的話,則會帶來很大的電量的開銷。

檢視手機耗電的歷史記錄

// 上次拔掉電源到現在的耗電情況 adb shell dumpsys batterystats --unplugged 你在逗我?讓我看命令列的輸出?後面我們來使用Battery Historian的圖表進行分析。

使用Battery Historian分析手機耗電量

安裝Docker

Docker下載網址 http://docs.docker.com/desktop/install/mac-install/

使用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 截圖2023-02-05 05.39.12.png 點選Browse按鈕並上傳bugreport.zip或bugreport.txt生成分析圖表。 截圖2023-02-05 05.44.59.png 我們可以通過時間軸來分析應用當下的電池使用情況,比較耗電的是哪部分硬體。

使用JobScheduler來合理執行後臺任務

JobScheduler是Android5.0版本推出的API,允許開發者在符合某些條件時建立執行在後臺的任務。比如接通電源的情況下才執行某些耗電量大的操作,也可以把一些不緊急的任務在合適的時候批量處理,還可以避開低電量的情況下執行某些任務。