【Android 异常与性能优化】UI卡顿相关

本文深入解析了UI卡顿的原理及原因,包括60fps与16ms的关系、过度绘制问题,并提供了有效的优化策略,如layout优化、listView优化等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

###UI卡顿原理 1. **60fps->16ms** 接下来我将带大家看下这两个数字的原理。其实很多用户感受到的卡顿问题,就是来源于UI渲染。我们知道Android系统**每隔16ms发出信号渲染一次UI**,如果每一次渲染都成功就能达到流畅的画面,如果一次渲染在16ms内无法完成就会让用户感受到卡顿。 我们在滑动listView时有时会感觉到卡顿,这是因为Item结构过于复杂/层级过多,无法在16ms内渲染完毕。 我们知道,**GC在垃圾回收时,所有线程就会暂停工作**,这时很有可能UI在16ms内渲染不完。 2. overdraw 中文意思是过度绘制,它是指同一像素在同一时间被绘制了很多次,这经常出现在**多层级的UI结构里**。 在手机的开发者选项里可以关注overdraw问题,有蓝色、半绿色、半红色、深绿色,我们的目标是**尽量减少红色,尽量出现蓝色**。

###UI卡顿原因分析

  1. 人为在UI线程做轻微耗时操作,导致UI线程卡顿
  2. 布局layout过于复杂,无法在16ms内渲染完成
  3. 同一时间动画执行次数过多
  4. View过度绘制
  5. 频繁触发measure、layout
  6. 内存频繁GC
  7. 冗余资源或逻辑
  8. ANR

###UI卡顿问题解决

  1. layout优化
    (1)使用include、merge、viewStub
    (2)层级尽量简单
    (3)gone替代invisible。视图设为gone不会进行绘制,设为invisible还会绘制。
  2. listView优化
  3. 背景和图片等内存分配优化(尽量减少不必要的背景)
  4. 避免ANR

###最后
以上就是我对UI卡顿问题总结,如有任何疑问欢迎留言提问,博主每天都会查看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值