Android 绘制学习总结

1、刷新率介绍

我们先来理一下基本的概念:

1、60 fps 的意思是说,画面每秒更新 60 次

2、这 60 次更新,是要均匀更新的,不是说一会快,一会慢,那样视觉上也会觉得不流畅

3、每秒 60 次,也就是 1/60 ~= 16.67 ms 要更新一次
4、一般来说屏幕的刷新率是硬件概念,意思是1秒显示60张图片。如果屏幕分辨率为60HZ,应用程序设置的刷新率要小于或等于60HZ。

2、图层介绍

2.1、绘制介绍

在Android渲染系统中,⽣产者是应⽤进程,消费者是SurfaceFlinger进程,两个不同的进程数据的交换就涉及跨 进程通信,⽽服务它们跨进程通信的组件是BufferQueue。BufferQueue就像是⼀个桥梁,让原本孤⽴的应⽤进程 和SurfaceFlinger进程联系在⼀起,有了BufferQueue这个桥梁,图形显示系统基本架构可变成如下:

Perfetto中SurfaceFlinger图层数据显示如下

代码环节中,ViewRootImpl.java中的drawSoftware

函数中,使用mSurface.lockCanvas(dirty)来获取SurfaceFlinger缓冲区

在surface.unlockCanvasAndPost(canvas);来释放缓冲区

2.2、卡顿是如何生成的呢?

既然出现了生产者和消费者,那么不是16.7ms类相关流程没有完成,是否就会感受到卡顿?

参考https://perfetto.dev/docs/data-sources/frametimeline

查看Perfetto log时,绿色表示正常绘制,其他颜色表示没按时绘制。

当APP绘制时长超过30帧后,对应在Log中有如下打印。

当APP Choreographer中来不及绘制时,是否就出现了卡顿呢?

答案是不一定,这个涉及到Buffer缓冲区设计

2.3、 Triple Buffer

Buffer缓冲区设计具体得参考

https://blog.csdn.net/flc2762/article/details/122881577

3、参考文档网站

1、(二十二)Android应用框架之Activity · Android核心分析 · 看云

2、Android 基于 Choreographer 的渲染机制详解 · Android Performance

相关推荐
白云LDC7 小时前
Android Studio新建Vecter asset一直显示Loading icons(转圈圈)的解决办法
android·ide·android studio
Rytter10 小时前
某气骑士 libtprt.so 反 Frida 机制分析与绕过
android·安全·网络安全
alexhilton11 小时前
揭密:Compose应用如何做到启动提升34%
android·kotlin·android jetpack
沐言人生13 小时前
React Native 源码分析1——HybridData 机制深度分析
android·react native
程序员陆业聪13 小时前
跨平台框架全景图:Flutter/KMP/KuiKly/RN的2026年格局
android
码云数智-园园15 小时前
Fibers(纤程)来了:打破阻塞,实现纯PHP下的异步非阻塞IO
android
shaoming377617 小时前
检查系统硬件配置是否满足PyCharm最低要求
android·spring boot·mysql
一起搞IT吧18 小时前
高通Camx功能feature分析之十五:insensor zoom介绍及实现
android·智能手机·相机
aqi0019 小时前
一文读懂 HarmonyOS 6.1 带来的十大重要升级
android·华为·harmonyos·鸿蒙·harmony
秋921 小时前
MySQL 9.7.0 使用详解:新特性、实战与避坑指南
android·数据库·mysql