必看9

卡顿优化:UI 卡顿、ANR 成因分析、主线程耗时排查、帧率优化;

1、什么是 UI 卡顿?根本原因

答案

手机屏幕默认 60 帧 / 秒 ,一帧理想耗时 16.6ms

主线程在 16.6ms 内没完成测量、布局、绘制、逻辑处理,就丢帧、掉帧,肉眼看到卡顿、滑动不流畅。

2、UI 卡顿常见原因有哪些?

答案

  1. 主线程做 网络请求、IO 读写、数据库、复杂计算、循环耗时
  2. 布局嵌套太深、过度绘制、View 太多、inflate 耗时
  3. 自定义 View onDraw 里做耗时操作、频繁创建对象
  4. 主线程锁等待、主线程频繁 GC、内存抖动
  5. 主线程消息太多,消息队列阻塞

3、ANR 是什么?触发时间阈值

答案ANR:应用无响应。系统监控主线程阻塞超时,弹出弹窗。阈值:

  • 按键 / 触摸事件:5s
  • 广播:10s
  • 服务:20s

4、ANR 常见成因

答案

  1. 主线程做耗时操作(网络、IO、数据库、大循环)
  2. 主线程死锁、等待子线程
  3. 主线程卡顿、消息处理积压太多
  4. 广播、Service 里做耗时阻塞
  5. 内存泄漏、频繁 GC 导致主线程被挂起

5、ANR 日志怎么分析?

答案

  1. 抓取 /data/anr/traces.txt
  2. 搜索 ANR in 看哪个页面、哪个进程
  3. 主线程堆栈,卡在哪个方法、哪行代码
  4. 定位主线程耗时、锁等待、死锁位置

6、主线程耗时怎么排查?常用手段

答案

  1. Android Studio Profiler:看主线程 CPU、卡顿堆栈
  2. StrictMode 严苛模式:检测主线程网络、磁盘 IO 违规
  3. 插点埋点:打印各方法执行耗时
  4. Looper 日志监听:拦截主线程消息,监控超过阈值的耗时任务
  5. 查看 ANR 日志、系统卡顿日志定位阻塞点

7、怎么避免主线程耗时?

答案

  1. 所有网络、IO、数据库、复杂计算全部丢子线程 / 协程 / 线程池
  2. 布局精简、减少嵌套、减少过度绘制
  3. onDraw 里不 new 对象、不做耗时逻辑
  4. 避免主线程同步锁、死锁
  5. 利用 IdleHandler 把非紧急任务放到空闲时机执行

8、什么是帧率优化?目标是多少

答案

目标稳定 60 帧,不掉帧、不卡顿。

帧率优化就是保证每帧耗时控制在 16.6ms 以内,减少掉帧、卡顿、滑动滞涩。

9、帧率优化具体怎么做?

答案

  1. 主线程只做 UI 刷新,剥离所有耗时到子线程
  2. 布局扁平化、减少层级、减少过度绘制
  3. 列表复用 ViewHolder,减少 inflate 和创建对象
  4. 图片预加载、缩略图、避免主线程解码大图
  5. 减少主线程 GC、避免内存抖动
  6. 监控帧率、卡顿打点,线上采集卡顿数据做专项优化

10、内存抖动为什么会造成卡顿?

答案

频繁大量创建和销毁临时对象 → 频繁触发 GC GC 会短暂阻塞主线程,导致掉帧、UI 卡顿。

相关推荐
峥嵘life4 小时前
Android 蓝牙设备连接广播详解-2026
android·python·学习
MusingByte7 小时前
别再裸用 Claude Code 了!安卓开发者必装 13 个官方推荐插件,效率翻 3 倍省 70% token
android
_李小白7 小时前
【android opencv学习笔记】Day 29: 滤波算法之Sobel 边缘检测
android·opencv·学习
Dxy12393102168 小时前
Python 操作 MySQL 事务:从入门到避坑
android·python·mysql
峥嵘life10 小时前
Android getprop 属性限制详解:User 版本属性获取问题分析
android·开发语言·python·学习
一航jason11 小时前
Speed Tools:一套低侵入的 Android 插件化 + 动态换肤 + 字体切换框架
android·插件化·组件化·换肤
李斯维11 小时前
Jetpack 可观察数据容器 LiveData 的入门与基础使用
android·android jetpack
问心无愧051312 小时前
ctf show web入门261
android·前端·笔记
alexhilton12 小时前
车载系统中的可扩展UI:从UI嵌入到系统窗口编排
android·kotlin·android jetpack
Cloud_Shy61813 小时前
解读《Effective Python 3rd Edition》:从练气到老魔(第一章 Item 4 - 6)
android·数据库·论文阅读·python