Android卡頓問題分析方法
阿新 • • 發佈:2019-01-29
卡頓直接原因:繪製一幀的時間>16ms
根本原因:
1)UI執行緒做了耗時操作(嚴重ANR)
2)佈局過於複雜,巢狀多,overdraw
3)記憶體GC被頻繁觸發
分析方法:
1)HierarchyViewer會顯示繪製每個view時(onMeasure、onLayout和onDraw的耗時),找出哪個view的繪製導致了掉幀,優化其佈局;
2)設定->開發者選項->除錯GPU過度繪製(overdraw)
3)Android Studio 滑鼠放在程式碼區點選右鍵->Analyze->Inspect Code–>介面選擇你要檢測的模組->點選確認開始檢測,會提示佈局及邏輯的問題
4)Traceview定位具體耗時的方法
優化策略:
1)
overdraw:優化佈局層級(多在xml中使用include標籤複用佈局、使用merge標籤去除不必要的佈局層級(配合include使用,即include的佈局的根節點不是RelativeLayot或Linearlayout二十merge標籤)、使用ViewStub標籤實現按需載入)、移除不必要的背景、invisible儘量用gone代替、onDraw中儘量用canvas.clipRect()指定繪製區域
2)GC頻繁導致記憶體抖動:
GC原因:GC_MALLOC——記憶體分配失敗時觸發;GC_CONCURRENT——當分配的物件大小超過一個限定值(不同系統)時觸發;GC_EXPLICIT——對垃圾收集的顯式呼叫(System.gc())
;GC_EXTERNAL_ALLOC——外部記憶體分配失敗時觸發;