UI卡頓原理
60fps->16ms程序的大部分操作要在16ms內(nèi)完成,listview 的item層疊了太多,有復(fù)雜動(dòng)畫導(dǎo)致。每一次虛擬機(jī)在GC的時(shí)候所有的線程也會(huì)停止。
Overdraw過渡繪制,多層次ui結(jié)構(gòu),某些像素區(qū)域被繪制很多次。GPU藍(lán) 綠 紅色 減少紅色。多次層疊的view的background。
原因分析
1.人為在UI線程做了輕微耗時(shí)操作,導(dǎo)致UI卡頓。沒有引起ANR。
2.布局Layout過于復(fù)雜,無法再16ms內(nèi)渲染,背景布局不能重疊。
3.同一時(shí)間動(dòng)畫執(zhí)行次數(shù)過多,導(dǎo)致cpu gpu負(fù)載過渡。
4.View頻繁繪制導(dǎo)致measure layout,耗時(shí)累積過多,整個(gè)view頻繁渲染。
5.內(nèi)存頻繁GC過多,導(dǎo)致暫時(shí)阻礙渲染操作。
6.冗余資源和邏輯導(dǎo)致加載和執(zhí)行緩慢。
7.ANR。
解決辦法
1.布局優(yōu)化, include merge,盡量不存在冗余嵌套,適當(dāng)?shù)脑O(shè)置gone,invisible,使用item復(fù)雜的情況下使用自定義view。
2.列表及adapter,使用convertView。
3.背景和圖片內(nèi)存分配優(yōu)化,圖片縮略等。
4.避免ANR 不要再ui線程做耗時(shí)操作。