问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Android性能优化:卡顿和丢帧问题的原理与解决方案

创作时间:
作者:
@小白创作中心

Android性能优化:卡顿和丢帧问题的原理与解决方案

引用
CSDN
1.
https://m.blog.csdn.net/zhangphil/article/details/138804486

在Android设备中,卡顿和丢帧是常见的性能问题,严重影响用户体验。本文将深入探讨这些问题的产生原理,并介绍相应的解决方案。

Android显示系统主要由CPU、GPU和display三部分组成。CPU负责计算数据,GPU负责渲染,渲染完成后将数据存放在buffer中,最后由display将buffer中的数据呈现到屏幕上。

渲染过程中的CPU和GPU分工

渲染过程主要涉及两个核心组件:CPU和GPU。

  • CPU:负责Measure(测量)、Layout(布局)等操作。
  • GPU:负责Rasterization(栅格化)。

在GPU中,存在两个重要的缓冲区:

  • Frame Buffer:存储像素值的二维数组,用于最终显示。
  • Back Buffer:用于接收CPU填充的数据。

GPU会定期交换Back Buffer和Frame Buffer,将Back Buffer中的数据栅格化后转移到Frame Buffer,然后交给屏幕显示,同时将原来的Frame Buffer转换为Back Buffer供程序处理。

常见问题及其解决方案

1. 撕裂(Tearing)

当CPU/GPU将数据准备好存入buffer中,但display还没来得及显示时,如果CPU/GPU开始写入下一帧数据,就会导致显示的上半部分是下一帧的数据,下半部分是上一帧的数据,这就是撕裂现象。

2. 丢帧(Jank)

当绘图速度过慢时,同一帧会在屏幕上显示至少两次。

为了解决这些问题,引入了双缓冲机制。双缓冲机制使用两个缓冲区:back buffer用于CPU/GPU后台绘制,front buffer用于显示。但是,如果没有VSYNC信号的协调,仍然会出现丢帧问题。

VSYNC的作用

VSYNC利用屏幕刷新时的垂直同步脉冲,确保在最佳时间点进行缓冲区交换。当VSYNC信号产生时,CPU会立即处理下一帧数据,大大降低Jank的概率。

三缓冲机制

为了进一步优化性能,引入了三缓冲机制。当双缓冲机制无法在16ms内完成数据处理时,三缓冲机制可以避免连续的Jank。

内存管理与卡顿

除了CPU和GPU层面的问题,整机低内存情况也会导致卡顿。kswapd0是一个内核工作线程,当内存不足时会被唤醒进行内存回收。频繁的内存回收会占用CPU资源,导致卡顿和耗电。

通过以下命令可以查看内存状况:

adb shell dumpsys meminfo
adb shell free
adb shell cat /proc/meminfo

总结

通过理解CPU、GPU和display的工作原理,以及VSYNC和缓冲区机制,可以有效地解决Android设备中的卡顿和丢帧问题。同时,合理管理内存使用,避免低内存情况,也是提升系统性能的关键。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号