android 性能專項

一、分類

1、資源消耗(cpu、內存、流量、功耗)

2、啓動耗時(冷啓、熱啓)

3、主要頁面加載時間

4、內存泄露、抖動

5、卡頓、頁面渲染

二、資源消耗

1、CPU 消耗

關於 android 的 cpu佔用率需要主要以下三種情況:

1、空閒狀態下的應用CPU消耗情況,即被測應用在系統資源非常空閒的情況下的佔用率,比如只開一個被測應用;

2、中等規格狀態下的應用CPU消耗情況,即後臺已經有幾個應用在運行已經並且消耗了系統的一些資源的情況下進行測試;

3、滿規格狀態下的應用CPU消耗情況。

通過adb獲取CPU的值

adb shell dumpsys cpuinfo

獲取單個應用的CPU值

adb shell dumpsys cpuinfo|grep packagename

通過top(相當於進程控制檯)獲取應用的CPU信息

adb shell top -n 1|grep packagename

也可以通過AS獲取CPU的值。

2、內存

android 內存介紹

VSS - Virtual Set Size 虛擬耗用內存(包含共享庫佔用的內存)

RSS - Resident Set Size 實際使用物理內存(包含共享庫佔用的內存)

PSS - Proportional Set Size 實際使用的物理內存(比例分配共享庫佔用的
內存)

USS - Unique Set Size 進程獨自佔用的物理內存(不包含共享庫佔用的內存)

USS 是針對某個進程開始有可疑內存泄露的情況,是一個程序啓動了會產生的虛擬內存,一旦這個程序進程殺掉就會釋放。

通過adb獲取內存

adb shell dumpsys meminfo

android APP性能問題盤點:
界面卡頓
啓動耗時長
CPU/內存佔用高
流量消耗大
耗電量大

主要排查工具:
1、繪圖
GPU Profile
Show GPU Overdraw
Dump View Hierarchy
TraceView
SysTrace
Trace For OpenGL

2、內存
Heap
Memory Monitor
Eclipse Memory Analyzer

繪圖性能- Android 顯示機制初探

垂直同步(VSYNC):

Refresh Rate:屏幕在一秒內刷新的次數,取決於硬件固定參數,如60Hz;

Frame Rate:GPU在一秒內繪製操作的幀數,如30fps,60fps。

GPU Profile 工具: 初步發現丟幀問題

設置– 開發者選項 – GPU顯示配置文件

Update:測量繪製時間
Execute:執行時間
Process:處理時間

這裏寫圖片描述

繪圖性能 - 界面卡頓、丟幀原因

佈局性能;
垃圾回收;
CPU佔用過高;
硬件加速;
過度繪製。

繪圖性能 - 過度繪製

屏幕上某個像素在同一幀被繪製了多次;

檢測工具:設置 - 開發者選項 - Show GPU Overdraw。

這裏寫圖片描述

內存性能 - Android 垃圾回收機制

C/C++:程序員自己負責釋放內存;
Java:垃圾回收機制,Garbage Collector 即GC。

內存問題一:內存抖動

大量的對象在短時間內創建和釋放;
頻繁觸發GC
造成UI卡頓

內存問題二:內存泄露

由於開發疏忽或錯誤導致程序未能釋放已經不再使用的對象;

原因:不再使用的對象持有強引用,阻止GC回收該對象。

Activity泄露:Activity、Context、Drawable
Fragment泄露

檢測工具:

Heap + MAT
LeakCanary
MQC 性能報告 - 性能問題

內存問題三:內存溢出

OutOfMemoryError
原因:超多dalvik堆內存限制 和 內存碎片;
內存佔用大戶:Bitmap : byte arrays 。

發佈了53 篇原創文章 · 獲贊 13 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章