【ANR/UI卡顿】

UI卡顿

1、UI卡顿原理

View的绘制帧数保持60fps是最佳,这要求每帧的绘制时间不超过16ms(1000/60),如果安卓不能在16ms内完成界面的渲染,那么就会出现卡顿现象

2、UI卡顿的原因分析

  • 在UI线程中做轻微的耗时操作,导致UI线程卡顿
  • 布局Layout过于复杂,无法在16ms内完成渲染
  • 同一时间动画执行的次数过多,导致CPU和GPU负载过重
  • overDraw,导致像素在同一帧的时间内被绘制多次,使CPU和GPU负载过重
  • View频繁的触发measure、layout,导致measure、layout累计耗时过多和整个View频繁的重新渲染
  • 频繁的触发GC操作导致线程暂停,会使得安卓系统在16ms内无法完成绘制
  • 冗余资源及逻辑等导致加载和执行缓慢
  • ANR

3、UI卡顿的优化

  • 布局优化

    • 使用include、ViewStub、merge
    • 不要出现过于嵌套和冗余的布局
    • 使用自定义View取代复杂的View
  • ListView优化

    • 复用convertView
    • 滑动不加载
  • 背景和图片优化

    • 缩略图
    • 图片压缩
  • 避免ANR

    • 不要在UI线程中做耗时操作

过渡绘制

避免在Service的onBind和onStartCommand中执行耗时操作,如确实有需要要改用IntentService,并谨记线程同步

Intent intent = new Intent(this, MyIntentService.class);
startService(intent);

避免在BroadcastReceive#onReceive中执行耗时操作,如果有耗时操作应该创建IntentService完成,而不应该在receiver中创建子线程进行

你可能感兴趣的:(【ANR/UI卡顿】)