UI卡頓
1屋群、UI卡頓原理
View的繪制幀數(shù)保持60fps是最佳盹愚,這要求每幀的繪制時(shí)間不超過(guò)16ms(1000/60)饲握,如果安卓不能在16ms內(nèi)完成界面的渲染,那么就會(huì)出現(xiàn)卡頓現(xiàn)象
2号俐、UI卡頓的原因分析
- 在UI線程中做輕微的耗時(shí)操作师枣,導(dǎo)致UI線程卡頓
- 布局Layout過(guò)于復(fù)雜,無(wú)法在16ms內(nèi)完成渲染
- 同一時(shí)間動(dòng)畫(huà)執(zhí)行的次數(shù)過(guò)多萧落,導(dǎo)致CPU和GPU負(fù)載過(guò)重
- overDraw,導(dǎo)致像素在同一幀的時(shí)間內(nèi)被繪制多次洗贰,使CPU和GPU負(fù)載過(guò)重
- View頻繁的觸發(fā)measure找岖、layout,導(dǎo)致measure敛滋、layout累計(jì)耗時(shí)過(guò)多和整個(gè)View頻繁的重新渲染
- 頻繁的觸發(fā)GC操作導(dǎo)致線程暫停许布,會(huì)使得安卓系統(tǒng)在16ms內(nèi)無(wú)法完成繪制
- 冗余資源及邏輯等導(dǎo)致加載和執(zhí)行緩慢
- ANR
3、UI卡頓的優(yōu)化
-
布局優(yōu)化
- 使用include绎晃、ViewStub蜜唾、merge
- 不要出現(xiàn)過(guò)于嵌套和冗余的布局
- 使用自定義View取代復(fù)雜的View
-
ListView優(yōu)化
- 復(fù)用convertView
- 滑動(dòng)不加載
-
背景和圖片優(yōu)化
- 縮略圖
- 圖片壓縮
-
避免ANR
- 不要在UI線程中做耗時(shí)操作
過(guò)渡繪制
避免在Service的onBind和onStartCommand中執(zhí)行耗時(shí)操作,如確實(shí)有需要要改用IntentService庶艾,并謹(jǐn)記線程同步
Intent intent = new Intent(this, MyIntentService.class);
startService(intent);
避免在BroadcastReceive#onReceive中執(zhí)行耗時(shí)操作袁余,如果有耗時(shí)操作應(yīng)該創(chuàng)建IntentService完成,而不應(yīng)該在receiver中創(chuàng)建子線程進(jìn)行