最近公司要求對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>,可以用以下指令:

查詢結果中,對應的時間參數詳細解析如下:
ThisTime:對應activity啟動耗時;
TotalTime:應用自身啟動耗時 = ThisTime + 應用application等資源啟動時間
WaitTime:系統啟動應用耗時 = TotalTime + 系統資源啟動時間
單純<code>啟動一個Activity,不記錄啟動時間</code>,可以使用以下指令。
示例圖中,對應Activity在AndroidManifest.xml中的聲明方式如下:
<code>關閉一個App程序</code>用如下指令。
本小節記錄以下四個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系統中,如果需要<code>檢視整個系統的記憶體詳情</code>,可以使用以下指令。
相關參數的詳細解釋如下所示:
本小節記錄以下兩個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占用資訊。
<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>。
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/ ,便可以開始應用耗電分析了。
使用 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