Android面向面试复习----UI卡顿

UI卡顿

UI卡顿是轻量版的ANR

1、 UI卡顿的原理

1. **60fps --> 16ms**:1s内绘制60帧,所以每一帧的绘制时间在16ms
2. overdraw,大量重叠的布局或者背景被重复绘制

2. UI卡顿原因分析

1. 人为在UI线程中做轻微的耗时操作,导致UI线程卡顿;
2. 布局Layout过于复杂,无法再16ms内完成渲染
3. 同一时间动画执行的次数过多,导致cpu或者gpu负载过重
4. view的过度绘制,导致某些像素在同一帧时间内被绘制多次,使cpu或者GPU负载过重
5. View频繁的触发measure、layout,导致measure、layout累计耗时过多及整个View频繁的重新渲染
6. 内存频繁触发GC过多,导致暂时阻塞渲染操作
7. 冗余资源及逻辑等导致加载和执行缓慢
8. ANR

3. UI卡顿总结

1. 布局优化
    1. 使用`<include>`,`<merage>`,`<ViewStub>`来进行优化
    2. 不要有过于复杂的嵌套或者冗余布局
    3. 使用gone代替inVisible(gone的控件不会绘制)
    4. 复杂嵌套的控件使用简单的自定义view替代
2. 列表及Adapter优化
    1. 复用currentView
    2. 监听滑动,滑动时不加载图片和数据,滑动完成后再进行
3. 背景和图片等内存分配优化
    1. 减少不必要的背景设置
    2. 图片进行压缩或者裁剪,尽量少浪费多余的内存
    3. 避免频繁GC回收造成丢帧现象
4. 避免ANR
开启子线程做耗时操作,常用安卓提供的异步框架:Handler,AsyncTask,IntentService,HandlerThread。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值