Android编舞者类Choreographer小结
Android编舞者类Choreographer小结
作用
编舞者类的作用主要是控制绘制节奏,用于发起一次vsync垂直同步信号的监听,当垂直同步信号来的时候会回调注册的Runnable或者FramCallback
Choreographer对象获取
Choreographer对象是通过它的getInstance方法获取实例,虽然看名字是单例,但是它是保存在ThreadLocal中,每个线程都会有一个唯一的实例,而不是全局单例
同步信号请求过程
在
ViewRootImpl的scheduleTraversals方法中,会先设置一个同步屏障,然后调用编舞者类的postCallback方法发起一次请求同步信号
- postCallback和postFrameCallback的区别主要在于请求的垂直同步信号的类型不同;postFrameCallback请求的类型是animation回调的对象类型是FrameCallback,而postCallback可以自定义传入任何类型的垂直同步信号,执行的回调对象类型是Runnable
编舞者类会把这个Callback根据类型和时间的先后顺序保存到队列中,队列的实现方式是单链表结构;Callback的类型有五种:input、animation、inserts_animation、traversal、commit
然后判断当前线程是否主线程,如果不是的话则通过Handler发送消息到主线程去执行,如果是主线程,则立刻调用native方法发起一次同步信号请求
当垂直同步信号来的时候,会回调响应的方法,最后会调用doFrame方法去处理垂直同步信号
在doFrame方法里面
先根据当前时间减去垂直同步信号的时间计算时间差,判断有没有跳帧,如果有跳帧并且超过30帧,则打印Log,并且会重新计算当前帧的绘制时间;
如果计算后当前帧的时间小于上一次帧绘制时间,则会重新发起一次垂直同步信号请求
接着从五个队列中,依次取出各个Callback并调用相应方法,Runnable调用run方法,FrameCallback调用doFrame方法
接着ViewRootImpl就开始调用doTraversal->performTraversal->performMeasure->performLayout->performDraw开始绘制
问答
- Q: 我们都知道Android的刷新频率是60帧/秒,这是不是意味着每隔16ms就会调用一次onDraw方法?
A: 不是,只有当界面需要刷新,并且编舞者请求的垂直同步信号到达时才会调用
-
Q: 如果界面不需要重绘,那么还16ms到后还会刷新屏幕吗?
A: 会的,但是刷新的是旧的数据
-
Q: 我们调用invalidate()之后会马上进行屏幕刷新吗?
A: 不会的,需要等待下一次垂直同步信号才会刷新
-
Q: 我们说丢帧是因为主线程做了耗时操作,为什么主线程做了耗时操作就会引起丢帧
A:因为垂直同步信号是由底层发出的,而且发出的时间间隔是一样的,如果主线程做了耗时操作,会导致编舞者类接收到垂直同步信号的时间比较晚,界面就不能及时刷新,从而引起丢帧和界面卡顿
-
Q: 如果在屏幕快要刷新的时候才去OnDraw()绘制,会丢帧吗?
A: 不会,屏幕刷新也是跟着垂直同步信号走的,当垂直信号到了的时候才会触发onDraw方法绘制,跟丢帧没有关系
相关文章:
Android编舞者类Choreographer小结
Android编舞者类Choreographer小结 作用 编舞者类的作用主要是控制绘制节奏,用于发起一次vsync垂直同步信号的监听,当垂直同步信号来的时候会回调注册的Runnable或者FramCallback Choreographer对象获取 Choreographer对象是通过它的getInstance方法…...
大专升本科难度大吗 需要考哪些科目
大专学历可以通过自考和成考提升学历到本科,自考的考试科目有12-16门左右,考试内容不难,但是考试周期长,需要考生通过所有课程才能申请毕业。成考专升本考试科目有政治,外语和专业课,考试内容简单ÿ…...
考研复试-英语问答+解答
每个问题2~3min 一、 1.考官问问题,没听明白 I’m sorry, I didn’t hear that clearly. May I ask you to repeat it, please? Sorry, I have no clear idea about this question for now, but I will think about it later. And if possible, I want to discuss …...
python 文件相关的操作 常用函数(读文件、写文件、文件的追加内容、修改文件内容、复制文件、按行读取文件、with open) json文件的读取
常用函数:open(打开文件),read(读文件到程序中),write(写程序中的变量到文件),close(关闭文件) 示例1:读文件(…...
python 系列 06 -生成及解析二维码
0 说明 二维码不止一种,本文介绍最常见的QR二维码。由于不能发二维码截图,所以所有的执行结果都隐去了。完整版本可以移步到此查看:https://vblogs.cn/momo1938/article?id0407576070659864 1 安装包 python 可以使用qrcode来生成二维码&…...
2023第二届中国绿色钢铁国际峰会
会议背景 钢铁是当今世界上最常用的金属,普遍应用于世界各国基础设施建设与机械、汽车、飞机、船舶、家电等产品的生产制造中。但是,随着各国政府与行业净零排放目标的确立,钢铁行业的减排降碳也成为了关注焦点。据世界钢铁协会称,…...
java 高考志愿填报系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目
一、源码特点 java 高考志愿填报系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0…...
机器学习 vs 深度学习:了解两者的异同
在人工智能领域中,机器学习和深度学习是两个重要的概念。尽管它们都可以用于处理复杂的数据和任务,但它们在其基本原理、算法和应用方面有着显著的不同之处。在本文中,我们将详细介绍机器学习和深度学习的定义、原理、算法和应用,…...
流行的 DAW编曲软件FL Studio 21 有什么新功能?
FL Studio 21 对流行的 DAW 和音乐制作软件进行了多项更新。最重要的变化包括:更快、更精确的音频包络和带有自动交叉推子的增益控制;一个能够标记、制作自定义颜色的标签和访问在线内容的新浏览器,以及一个带有可视化和擦除功能的内嵌音频播…...
【Java】抽象类和接口
抽象类和接口抽象类抽象类的概念抽象类语法抽象类的注意事项抽象类的作用接口接口的概念语法规则接口使用接口注意实现多个接口接口间的继承接口使用实例给对象数组排序Clonable 接口和深拷贝浅拷贝深拷贝抽象类和接口的区别抽象类 抽象类的概念 在面向对象的概念中ÿ…...
Lora:Low-Rank Adapation of Large Language models
Lora:Low-Rank Adapation of Large Language modelsIntroductionMethodExperiment代码Introduction 这篇论文最初与21.06上传与arXiv,作者指出在当时,NLP的一个重要范式是先训练一个通用领域的模型然后在通过微调适应不同的领域与数据&#…...
洛谷-P8466 [Aya Round 1 A] 幻想乡扑克游戏
题目:P8466 [Aya Round 1 A] 幻想乡扑克游戏 题目描述: 题目描述 斗地主是一种使用 �A 到 �K 加上大小王的共 5454 张扑克牌来进行的游戏,其中大小王各一张,其它数码牌各四张。在斗地主中,牌的…...
HBase性能优化方法总结
1. 表的设计 1.1 Pre-Creating Regions 默认情况下,在创建HBase表的时候会自动创建一个region分区,当导入数据的时候,所有的HBase客户端都向这一个region写数据,直到这个region足够大了才进行切分。一种可以加快批量写入速度的方…...
Linux基础内容(16)—— 文件系统
Linux基础内容(15)—— 缓冲区https://blog.csdn.net/m0_63488627/article/details/129824563?spm1001.2014.3001.5501 目录 1.基础知识 2.磁盘的存储原理 1.物理结构 2.存储结构 3.逻辑结构 1.基础知识 之前介绍的全是进程打开的文件是如何执行…...
Vue自定义事件
自定义事件 通以上代码不难发现,数据项在Vue的实例中, 但删除操作要在组件中完成, 那么组件如何才能删除Vue实例中的数据呢?此时就涉及到参数传递与事件分发了, Vue为我们提供了自定义事件的功能很好的帮助我们解决了这个问题…...
Java SE 基础 (6) 第一个Java程序
开发环境已经搭建完毕,可以开发我们第一个Java程序了。 Java程序开发三步骤:编写、编译、运行。 编写Java源程序 public class HelloWord {public static void main(String[] args) {System.out.println("HelloWord!");} } 第一个 HelloWo…...
P1004 [NOIP2000 提高组] 方格取数
题目描述 设有 ��NN 的方格图 (�≤9)(N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字 00。如下图所示(见样例): 0 0 0 0 0 0 0 0 0 0 13 0 0 6 0 0 0 0 0…...
Leetcode.1024 视频拼接
题目链接 Leetcode.1024 视频拼接 Rating : 1746 题目描述 你将会获得一系列视频片段,这些片段来自于一项持续时长为 time秒的体育赛事。这些片段可能有所重叠,也可能长度不一。 使用数组 clips描述所有的视频片段,其中 clips[i…...
20个华为路由器常用的Python脚本,网工写自动化脚本时候可以参考!
你好,这里是网络技术联盟站。 昨天给大家介绍了10个华为交换机的Python脚本: 10个华为华为交换机常用的Python脚本,网络工程师收藏! 大家反响不错,后期我会陆续出一下思科、H3C、锐捷等厂商的脚本,前期会…...
【kubernetes云原生】k8s资源管理命令与Namespace使用详解
目录 一、前言 二、k8s概述 三、k8s常用操作管理命令 3.1 kubectl 命令用法 3.2 常用控制台管理命令演示 3.2.1 获取全部节点信息 3.2.2 获取当前集群下全部pod 3.2.3 查看某个pod信息 3.2.4 获取当前集群下的所有namespace信息 3.2.5 查看当前集群下已创建的资源 3…...
YOLO X Layout快速部署:Docker一键启动,开箱即用
YOLO X Layout快速部署:Docker一键启动,开箱即用 1. 简介与核心价值 你是否经常需要处理大量文档图片,却苦于手动标注各种元素区域?YOLO X Layout正是为解决这个问题而生的智能工具。它能自动识别文档中的文本、表格、图片、标题…...
Pandas索引器 loc 和 iloc 比较及代码示例
Pandas 索引器 loc 和 iloc 比较及代码示例 以下是针对 Pandas 中 loc 和 iloc 的深度对比分析及代码示例,结合核心差异、使用场景和底层机制展开说明: 一、核心差异解析 特性loc (标签索引)iloc (位置索引)索引类型行/列标签(字符串、日期等…...
SAP-ABAP:SAP ABAP 经典弹窗函数 POPUP_TO_CONFIRM 完全指南
SAP ABAP 经典弹窗函数 POPUP_TO_CONFIRM 完全指南在SAP开发中,如何优雅地让用户确认“你确定要删除这条数据吗?”——答案就是 POPUP_TO_CONFIRM。在 ABAP 开发的世界里,与用户的交互不仅仅是输入输出。很多时候,我们需要在程序执…...
巧用API接口,数据驱动提升店铺DSR评分
前言 DSR评分(Detail Seller Rating,卖家服务评级系统)是衡量电商店铺综合服务质量的核心指标,直接影响店铺排名、流量分配和买家信任度。传统的提升方式如加强客服培训、优化物流等固然重要,但在大数据时代࿰…...
Redis 竞品与替代方案选型可行性分析报告
Redis 竞品与替代方案选型可行性分析报告 一、引言 Redis 作为内存数据库领域的标杆产品,凭借其高性能、丰富的数据结构和成熟的生态系统,在缓存、消息队列、实时计算等场景占据主导地位。然而,随着云原生架构的普及、数据规模的爆炸式增长以…...
STM32首次烧录选择erase sectors导致程序跑飞
一、故障现象小批量打样回来的板子,烧录程序后一切正常,蜂鸣器响0.5s,LED闪烁等待握手;但是断电重启后蜂鸣器长鸣,LED不闪烁,无法正常运行。二、分析解决过程首先我看了一下电源,电压、电流都是…...
AD7193高精度ADC驱动设计与嵌入式集成实践
1. PRDC_AD7193 库概述:面向高精度测量的 AD7193 嵌入式驱动设计与工程实践AD7193 是 Analog Devices(ADI)推出的一款专为高精度、低噪声测量场景优化的 Σ-Δ 型 24 位模数转换器(ADC)。其核心特性包括:集…...
NineData SQL AI 智能补全上线:写 SQL,不必每次都从头敲
写 SQL 的人,大概都遇到过这种情况: 明明脑子里已经知道要查什么,但真正开始写的时候,还是得一点点补关键字、补表名、补字段、补语句结构。越是多表查询、长 SQL、复杂条件,越容易写得慢、改得烦,还容易漏…...
Halcon轮廓拟合与排序:从基础算子到工业检测实战
1. Halcon轮廓处理技术概览 在工业视觉检测领域,轮廓处理技术扮演着至关重要的角色。想象一下,你站在一条自动化产线旁,传送带上快速移动着各种形状的金属零件。这些零件可能摆放得杂乱无章,表面可能有划痕或油污,但生…...
YOLO26涨点改进| ICCV 2025 | 独家创新首发、注意力改进篇| 引入CBSM通道增强与智能空间映射模块,含多种创新改进,助力图像融合、红外小目标检测、图像分割、图像分类高效涨点
一、本文介绍 🔥本文给大家介绍使用 CBSM通道增强与智能空间映射模块 改进YOLO26网络模型,作用在于对输入特征进行通道增强与空间映射,使浅层图像信息能够更好地适配深层语义特征,从而提升特征表达质量并减少特征不匹配问题。其优势体现在能够有效抑制背景噪声、强化关键…...
