Systrace系列9 —— MainThread 和 RenderThread 解读

news/2024/9/23 7:30:05/

本文是介绍 Android App 中的 MainThread 和 RenderThread,也就是大家熟悉的主线程渲染线程。文章会从 Systrace 的角度来看 MainThread 和 RenderThread 的工作流程,以及涉及到的相关知识:卡顿、软件渲染、掉帧计算等。

这里以滑动列表为例 ,我们截取主线程和渲染线程一帧的工作流程(每一帧都会遵循这个流程,不过有的帧需要处理的事情多,有的帧需要处理的事情少) ,重点看 “UI Thread ” 和 RenderThread 这两行

这张图对应的工作流程如下

  1. 主线程处于 Sleep 状态,等待 Vsync 信号
  2. Vsync 信号到来,主线程被唤醒,Choreographer 回调 FrameDisplayEventReceiver.onVsync 开始一帧的绘制
  3. 处理 App 这一帧的 Input 事件(如果有的话)
  4. 处理 App 这一帧的 Animation 事件(如果有的话)
  5. 处理 App 这一帧的 Traversal 事件(如果有的话)
  6. 主线程与渲染线程同步渲染数据,同步结束后,主线程结束一帧的绘制,可以继续处理下一个 Message(如果有的话,IdleHandler 如果不为空,这时候也会触发处理),或者进入 Sleep 状态等待下一个 Vsync
  7. 渲染线程首先需要从 BufferQueue 里面取一个

http://www.ppmy.cn/news/93974.html

相关文章

vite的使用

私人博客 许小墨のBlog —— 菜鸡博客直通车 系列文章完整版,配图更多,CSDN博文图片需要手动上传,因此文章配图较少,看不懂的可以去菜鸡博客参考一下配图! 系列文章目录 前端系列文章——传送门 后端系列文章——传送…

一文读懂:什么是数组

大家好,我是三叔,很高兴这期又和大家见面了,一个奋斗在互联网的打工人。 什么是数组 Java是一种面向对象的编程语言,提供了许多数据结构来处理和组织数据。其中,数组是一种常见且强大的数据结构,是存放在…

递归的基本概念

分类: 直接递归 间接递归 如果递归函数中调用递归的语句为最后一个执行语句,则称这种递归为尾递归 递归使用条件 原问题可以划为一个或多个子问题,且子问题的求解方式与原问题相同,只是数量规模不同 递归的调用次…

Ubuntu crontab 遇到的sh脚本一些问题(手动执行可以,自动执行不行)

问题一: 问题描述: 在写一个脚本循环时候,出现“let:not found”,这是因为在ubuntu默认是指向bin/dash解释器的,dash是阉割版的bash,其功能远没有bash强大和丰富.并且dash不支持let和i等功能. 解决办法: 打开一个终端输入&#xf…

PGXC GaussDB

PGXCA PGXC(PostgreSQL eXtended Coordinator)是一个基于 PostgreSQL 架构的分布式数据库解决方案。它扩展了 PostgreSQL,为用户提供了在多个节点上分布式存储和处理数据的能力。 PGXC 的设计目标是将 PostgreSQL 扩展为能够处理大规模数据…

Python类的属性和方法介绍

Python类的属性和方法介绍 本文主要讲python类属性(类变量)、实例属性(实例变量);类方法、静态方法、实例方法。 【定义在类中的变量也称为属性,定义在类中的函数也称为方法。】 这些都是Python面向对象…

Linux 软件包管理工具

rpm命令管理软件包 1.学会看rpm包,通过rpm包的名字来了解这个软件包的一些基础信息xfsprogs-4.19.0-2.el8.x86_64.rpm xfsprogs 软件名字 4.19.0 版本号 2 发行次数 el8 适用于哪个操作系统(rel8) x86_64 软…

计算Yocto中LIC_FILES_CHKSUM的md5值

md5网站 https://emn178.github.io/online-tools/md5_checksum.html 将源码中的LICENCE文件丢进去。 LIC_FILES_CHKSUM值的语法如下: LIC_FILES_CHKSUM " file:// license_info_location ;md5 md5_value " license_info_location 这是包含您的许可证信…