天天看點

Android App性能優化——記憶體、CPU、耗電量、啟動時間名額擷取

最近公司要求對App進行性能優化。考慮到既然是優化性能,那首先要擷取App的相關性能名額,比如: 記憶體占用、CPU使用率、App啟動時間、App耗電量 等情況,擷取以上各名額後,才能針對性分析确定是否存在優化的可能。

最近公司要求對App進行性能優化。考慮到既然是優化性能,那首先要擷取App的相關性能名額,比如: <code>記憶體占用</code>、<code>CPU使用率</code>、<code>App啟動時間</code>、<code>App耗電量</code>等情況,擷取以上各名額後,才能針對性分析确定是否存在優化的可能。

檢視<code>App啟動時間</code>(冷啟動、熱啟動)

檢視<code>程序記憶體</code>占用

檢視<code>程序CPU</code>使用率

檢視<code>App耗電量</code>

本小節記錄以下三個adb shell 指令:

adb shell am start -W [包名]

啟動APP,查詢App的啟動時間

adb shell am start -n [包名]/[包名.Activity]

啟動一個Activity(不記錄啟動時間)

adb shell am force-stop [包名]

關閉一個APP程序

查詢<code>App的啟動時間</code>,可以用以下指令:

Android App性能優化——記憶體、CPU、耗電量、啟動時間名額擷取

查詢結果中,對應的時間參數詳細解析如下:

ThisTime:對應activity啟動耗時;

TotalTime:應用自身啟動耗時 = ThisTime + 應用application等資源啟動時間

WaitTime:系統啟動應用耗時 = TotalTime + 系統資源啟動時間

單純<code>啟動一個Activity,不記錄啟動時間</code>,可以使用以下指令。

Android App性能優化——記憶體、CPU、耗電量、啟動時間名額擷取

示例圖中,對應Activity在AndroidManifest.xml中的聲明方式如下:

<code>關閉一個App程序</code>用如下指令。

Android App性能優化——記憶體、CPU、耗電量、啟動時間名額擷取

本小節記錄以下四個adb shell 指令:

adb shell dumpsys meminfo [程序名]

Android系統中,檢視某一<code>程序的記憶體占用</code>情況

adb shell ps

Android系統中,顯示全部系統程序

adb shell ps | grep [keyword]

Android系統中,篩選包含特定關鍵詞的程序

adb shell cat /proc/meminfo

Android系統中,檢視<code>整個系統的記憶體詳情</code>

Android系統中,檢視某一<code>程序的記憶體占用情況</code>可以使用以下指令。

以上截圖中 <code>TOTAL</code> 字段,為對應程序占用的系統總記憶體;其他字段不再做詳細介紹。

Android系統中,若不了解對應程序的程序名稱,可用如下指令<code>顯示全部系統程序</code>:

Android系統中,亦可根據特定關鍵詞,<code>篩選包含特定關鍵詞的程序</code>:

Android App性能優化——記憶體、CPU、耗電量、啟動時間名額擷取

Android系統中,如果需要<code>檢視整個系統的記憶體詳情</code>,可以使用以下指令。

Android App性能優化——記憶體、CPU、耗電量、啟動時間名額擷取

相關參數的詳細解釋如下所示:

本小節記錄以下兩個adb shell 指令:

adb shell dumpsys cpuinfo | grep [程序名]

Android系統中,檢視某一<code>程序的CPU占用情況</code>情況

adb shell cat /proc/cpuinfo

Android系統中,檢視<code>CPU各核心詳情</code>

Android系統中,篩選檢視某一<code>程序的CPU占用情況</code>可以使用以下指令。

<code>adb shell dumpsys cpuinfo | grep [程序名]</code> 指令可以篩選特定程序的CPU占用資訊。

Android App性能優化——記憶體、CPU、耗電量、啟動時間名額擷取

<code>adb shell dumpsys cpuinfo</code> 指令可以展示出每一個程序的CPU占用資訊,同時列印總的CPU占用資訊。

Android系統中,如果需要<code>檢視CPU各個核心的詳細資訊</code>,可以使用以下指令。

App耗電量相關資料擷取 與 分析可以采用以下兩種方式:

adb shell dumpsys batterystats

采用該指令,擷取<code>對應包名應用</code>耗電量資料;

Battery-Historian分析工具

采用該分析工具,可以實作<code>對應包名應用</code>耗電量分析;

Android系統中,檢視<code>對應包名應用</code>電量消耗資料,可以采用如下方式。

首先要<code>重置電量資料</code>(重置電量資料,所有App的電量消耗資料将清零);

然後<code>打開全量日志</code>資料(打開全量電量相關日志記錄)。

重置電量資料後,需要<code>拔掉資料線</code>,進行相關<code>APP場景測試</code>。

<code>重新連接配接資料線</code> 通過以下指令可在指令行檢視對應<code>應用的電量消耗</code>,亦可将電量消耗資訊<code>導出到檔案中</code>。

Android App性能優化——記憶體、CPU、耗電量、啟動時間名額擷取
Android App性能優化——記憶體、CPU、耗電量、啟動時間名額擷取

Battery Historain是谷歌開發的分析工具,其可以用來分析<code>對應包名應用</code>的耗電情況。

因本小節重點還是<code>如何擷取對應包名應用耗電相關資料</code>,對于<code>Battery Historain的安裝與簡單使用</code>可參考我的文章

Mac 中 Battery Historain 安裝與使用:

https://xiaxl.blog.csdn.net/article/details/117758299

<code>對應包名應用耗電相關資料</code>擷取步驟如下:

<code>重新連接配接資料線</code> 通過以下指令導出<code>對應應用的電量消耗資料</code>。

上一步導出的<code>bugreport檔案</code>,上傳到<code>battery-historian</code> 工具進行分析。

注:

國内安裝<code>Battery Historain</code>太繁瑣,主要是各種依賴包國内都下載下傳不下來。

昨天我安裝<code>Battery Historain</code> <code>一下午沒搞定,後來搞到半夜一點鐘</code> 終于安裝完成(中途曾幾度想放棄安裝,總之安裝太繁瑣)。

後來發現,已經有人搭建了一個<code>Battery Historain</code>線上環境,相關網址為: https://bathist.ef.lc/

将導出的<code>bugreport檔案</code>上傳到 https://bathist.ef.lc/ ,便可以開始應用耗電分析了。

Android App性能優化——記憶體、CPU、耗電量、啟動時間名額擷取

使用 Battery Historian 分析耗電情況:

https://developer.android.google.cn/topic/performance/power/battery-historian?hl=zh-cn

Battery Historian GitHub位址如下:

https://github.com/google/battery-historian?spm=a2c6h.12873639.0.0.10ed5c987lIJt6

Android 調試橋 (adb)

https://developer.android.google.cn/studio/command-line/adb?hl=zh-cn

android developer dumpsys:

https://developer.android.google.cn/studio/command-line/dumpsys?hl=zh-cn

Android App性能優化——記憶體、CPU、耗電量、啟動時間名額擷取

繼續閱讀