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
相关文章:
Android 绘制学习总结
1、刷新率介绍 我们先来理一下基本的概念: 1、60 fps 的意思是说,画面每秒更新 60 次 2、这 60 次更新,是要均匀更新的,不是说一会快,一会慢,那样视觉上也会觉得不流畅 3、每秒 60 次,也就是 1…...
Linux下部署SSM项目
作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 Linux部署SSM项目 打包项目 1、修改pom.xml文件,打包方式改为war <packaging>war</packaging>2、idea 通过maven的clean,…...
计算机网络 笔记 数据链路层 2
1,信道划分: (1)时分复用TDM 将时间等分为“TDM帧”,每个TDM帧内部等分为m个时隙,m个用户对应m个时隙 缺点:每个节点只分到了总带宽的1/m,如果有部分的1节点不发出数据,那么就会在这个时间信道被闲置,利用…...
xml简介
目录 基本语法特点及应用场景一个简单示例 xml(全称eXtensible Markup Language)是一种用于存储和传输数据的标记语言,跨平台并且跨语言,xml内容较多,这篇文章会介绍一些基础的内容。 基本语法 xml文档通常以xml声明开…...
透明部署、旁路逻辑串联的区别
背景 需讨论防火墙到底是串联,还是旁挂。 通常串联指的就是“透明部署”,旁挂指的就是“逻辑串联”。 透明部署(串联) 也称为透明模式或桥接模式,是一种安全设备的部署方式。在这种模式下,安全设备被串联…...
【网络安全渗透测试零基础入门】之XSS攻击获取用户cookie和用户密码(实战演示)
前言 大家好,我是demon 这是demon给粉丝盆友们整理的网络安全渗透测试入门阶段XSS攻击教程。 本阶段主要讲解XSS攻击获取用户cookie和用户密码。 喜欢的朋友们,记得给晓晓点赞支持和收藏一下,关注我,学习黑客技术。 简介 该…...
c#版本、.net版本、visual studio版本之间的对应关系
最近这几年一直没用过c#开发,都是从事Qt c开发工作,回想一下之前c#还要追溯到2019年,算算时间大概都已过去4,5年了,时间飞快。 2019真是个神奇的数字,vs2019是我用的时间最长的一个IDE,新冠起始…...
熵与交叉熵:从不确定性角度理解 KL 散度
从不确定性减少视角理解KL散度 【 Transformer 系列,故事从 d k \sqrt{d_k} dk 说起】 LLM这么火,Transformer厥功甚伟,某天心血来潮~,再去看看! 它长这个样子: 深入浅出 Transformer 看完后ÿ…...
Redis:数据类型
1. 字符串(String) 简介 概念:这是最简单的数据类型,可以存储字符串、整数或浮点数。特点:支持原子操作,如递增和递减数值。 示例 # 设置一个键值对 SET mykey "Hello, Redis!"# 获取该键的值…...
搭建Node.js后端
从头开始搭建一个Node.js后端,并实现查询历史数据的功能,下面是详细的步骤说明,包括环境配置、项目初始化、代码编写、以及服务器启动。 1. 环境配置 1.1 安装 Node.js 和 npm 首先,你需要在你的电脑上安装 Node.js 和 npm&…...
集合——数据结构
数据结构 就是计算机存储数据的方式。 不同情况下采取不同数据结构会让数据查找,存储更加有效率。 栈...
从CentOS到龙蜥:企业级Linux迁移实践记录(系统安装)
引言: 随着CentOS项目宣布停止维护CentOS 8并转向CentOS Stream,许多企业和组织面临着寻找可靠替代方案的挑战。在这个背景下,龙蜥操作系统(OpenAnolis)作为一个稳定、高性能且完全兼容的企业级Linux发行版࿰…...
《机器学习》——支持向量机(SVM)
文章目录 什么是支持向量机?基本原理数学模型 支持向量机模型模型参数属性信息 支持向量机实例(1)实例步骤读取数据可视化原始数据使用支持向量机训练可视化支持向量机结果完整代码 支持向量机实例(2)实例步骤导入数据…...
【PPTist】公式编辑、插入音视频、添加动画
一、插入公式 点击公式的时候 latexEditorVisible 会变成 true src/views/Editor/CanvasTool/index.vue <Modalv-model:visible"latexEditorVisible" :width"880" ><LaTeXEditor close"latexEditorVisible false"update"data &…...
LeetCode - #186 翻转字符串里的单词 II(会员题)
网罗开发 (小红书、快手、视频号同名) 大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等…...
Kafka核心参数与使用02
一、从基础的客户端说起 Kafka 提供了非常简单的生产者(Producer)和消费者(Consumer)API。通过引入相应依赖后,可以快速上手编写生产者和消费者的示例。 1. 消息发送者主流程 一个最基础的 Producer 发送消息的步骤…...
Three.js 渲染技术:打造逼真3D体验的幕后功臣
文章目录 前言一、着色器(Shaders)二、后处理(Post-processing)三、抗锯齿(Anti-aliasing)四、实时渲染与离线渲染五、光照模型与材质优化六、环境映射(Environment Mapping)七、纹理…...
QTcpSocket 如何统计在线时长
基本原理 QTcpSocket是 Qt 库中用于 TCP 通信的类。要统计在线时长,关键思路是记录连接建立的时间和当前时间,通过计算两者的差值来得到在线时长。实现步骤 记录连接建立时间: 在连接成功的信号槽函数中记录开始时间。例如,当QTcpSocket成功连接到服务器时,会发出connecte…...
【Altium】AD使用智能粘贴功能把多个网络标签改成端口
1、 文档目标 使用智能粘贴功能把多个网络标签(net lable)改成端口(port) 2、 问题场景 客户有一份原理图,网络用的是net label,没用Port,然后创建一个sheet symbol,但是sheet sy…...
.NET 终止或结束进程
如何使用 C# 终止进程。 使用简单的方法终止.NET中的现有进程Process.Kill()。有一个可选参数 true 或 false,用于结束与要结束的进程相关的所有子进程。 了解如何创建流程。 结束当前进程: System.Diagnostics.Process.GetCurrentProcess().Kill(tru…...
超导量子计算中的三量子比特门技术解析
1. 超导量子计算中的三量子比特门技术概述在量子计算领域,实现高保真度的多量子比特门操作一直是核心挑战。超导量子处理器作为当前最有前景的量子计算平台之一,其性能很大程度上取决于量子门操作的精度和效率。固定频率transmon架构因其出色的相干性和简…...
CATCCOS核心组件深度解析:从Host到Device的分层架构设计原理
CATCCOS核心组件深度解析:从Host到Device的分层架构设计原理 【免费下载链接】catccos CATCCOS昇腾计算-通信融合算子模板库,是一个聚焦于提供高性能计算通信融合类算子基础模板的代码库。 项目地址: https://gitcode.com/cann/catccos CATCCOS昇…...
Linux 登录用户、主机名、提示符详解(新手不迷路)
前言刚打开Linux终端,新手总会被一行奇怪的字符搞懵:ubuntuubuntu:~$ —— 这串字符到底是什么意思?“ubuntu”重复出现,冒号、波浪号、美元符号又代表什么?其实,这串字符就是Linux的“提示符”,…...
Linux玩转硬件调试:用CH347芯片一站式搞定JTAG、SWD、SPI Flash和EEPROM(含中断检测实战)
Linux玩转硬件调试:用CH347芯片一站式搞定JTAG、SWD、SPI Flash和EEPROM(含中断检测实战) 在嵌入式开发和硬件逆向工程领域,调试工具的选择往往决定了工作效率的上限。传统方案需要购置价格高昂的专用调试器,而CH347芯…...
为什么很多人学不会渗透?因为一开始就没学HTTP
最近刚开始系统学 Web 安全,发现很多人一上来就学 Kali、SQLMap、各种扫描器,但其实最应该先学的是 HTTP。因为后面很多 Web 漏洞,本质上都是在“修改 HTTP 请求”。比如:- SQL 注入 → 改参数 - XSS → 改输入内容 - 越权 → 改 …...
福特押注五款新车型,含电动车与Bronco,欲重振欧洲市场
福特计划未来三年内在欧洲推出五款全新乘用车,以重振其在欧洲市场日渐式微的品牌形象。这一"福特欧洲乘用车新纪元"计划涵盖一款全新的多能源Bronco SUV、一款小型纯电掀背车、一款纯电SUV,以及两款多能源跨界SUV,所有车型均专为欧…...
生物医学英文文献去哪查?
想追踪领域前沿,国际数据库访问不稳定,找篇文献要翻三四个平台;想梳理本土研究进展,中文核心资源分散在不同库,检索起来浪费大半天;要做学科趋势分析,各种工具功能碎片化,导出数据还…...
初创团队如何利用 Taotoken 的 Token Plan 有效控制 AI 开发成本
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 初创团队如何利用 Taotoken 的 Token Plan 有效控制 AI 开发成本 对于资源有限的初创团队而言,在产品原型开发或内部工…...
LabVIEW项目实战:用‘类+队列’模式管理仪器参数,告别全局变量混乱
LabVIEW工程实践:基于类与队列的仪器参数管理框架设计 在工业自动化测试系统中,仪器参数管理一直是困扰工程师的典型难题。当系统需要同时控制网口、串口、GPIB等多种接口的测试设备时,传统的全局变量方案会导致参数耦合、修改不同步等问题。…...
桌面Z箍缩实验:从等离子体原理到聚变中子探测的DIY实践
1. 项目概述:从“人造太阳”到桌面实验的能源狂想“如何通过聚变制造能源及如何实现”,这个标题背后,是无数工程师和科学家为之奋斗终身的终极能源梦想。它听起来宏大得像是国家实验室的专属课题,但今天我想从一个更接地气的、带有…...
