当前位置: 首页 > news >正文

HWUI 和 Skia

📌 HWUI 和 Skia 的关系

  1. Skia 是 Android 的底层 2D 图形库,提供 CPU 和 GPU 渲染能力,支持 OpenGL、Vulkan、Metal 等后端。
  2. HWUI 是 Android UI 组件的 GPU 渲染引擎,主要用于 加速 View、动画、阴影等 UI 元素的绘制
  3. HWUI 依赖 Skia 进行实际的绘制,但它有自己的一套绘制管理逻辑,并优化了 Android UI 的绘制流程

📌 HWUI 如何使用 Skia

从 Android 10(API 级别 29)开始,HWUI 完全迁移到 Skia GPU 渲染,主要基于 Skia 的 OpenGL/Vulkan 后端 进行 GPU 计算。

🔹 主要架构

Android UI 绘制├── 应用层:View (TextView, ImageView, etc.)├── Framework:Canvas API (drawXXX)├── **HWUI(渲染引擎)**│   ├── RenderThread│   ├── DisplayListRenderer│   ├── SkiaGL/VulkanPipeline  <--- 这里使用 Skia 进行 GPU 渲染│   └── OpenGL/Vulkan(GPU 计算)├── SurfaceFlinger(合成)├── 硬件层(GPU/DPU 显示)

🔹 关键点

  1. 应用调用 View.draw(Canvas)

    • Canvas.drawXXX() 其实是 HWUI 提供的 Skia Canvas,不是纯 Skia。
    • HWUI 维护了一套 DisplayList,用于存储绘制指令。
  2. HWUI 使用 Skia 进行 GPU 绘制

    • HWUI 通过 SkiaGLPipelineSkiaVulkanPipeline 将 DisplayList 转换成 Skia 绘制命令。
    • Skia 生成 OpenGL/Vulkan 渲染指令,交给 GPU 进行计算。
  3. 最终输出到 SurfaceFlinger

    • HWUI 处理完成后,将渲染结果写入 Surface,再由 SurfaceFlinger 进行合成。

📌 结论

HWUI 依赖 Skia 进行 GPU 渲染,但它有自己的一套绘制逻辑,并不是简单的 Skia 封装。
Skia 负责底层绘制,而 HWUI 负责 UI 组件的绘制管理(比如 DisplayList、动画、缓存)
Android 10 之后,HWUI 不再直接操作 OpenGL,而是完全基于 Skia GPU 渲染

使用 adb shell dumpsys gfxinfo 命令,查看 GPU 渲染状态:

adb shell dumpsys gfxinfo <应用包名>

相关文章:

HWUI 和 Skia

&#x1f4cc; HWUI 和 Skia 的关系 Skia 是 Android 的底层 2D 图形库&#xff0c;提供 CPU 和 GPU 渲染能力&#xff0c;支持 OpenGL、Vulkan、Metal 等后端。HWUI 是 Android UI 组件的 GPU 渲染引擎&#xff0c;主要用于 加速 View、动画、阴影等 UI 元素的绘制。HWUI 依赖…...

Pytorch使用手册--将 PyTorch 模型导出为 ONNX(专题二十六)

注意 截至 PyTorch 2.1,ONNX 导出器有两个版本。 torch.onnx.dynamo_export 是最新的(仍处于测试阶段)导出器,基于 PyTorch 2.0 发布的 TorchDynamo 技术。 torch.onnx.export 基于 TorchScript 后端,自 PyTorch 1.2.0 起可用。 一、torch.onnx.dynamo_export使用 在 60 …...

GitHub SSH连接问题解决指南

&#x1f50d; GitHub SSH连接问题解决指南 问题描述 遇到错误&#xff1a;ssh: connect to host github.com port 22: Connection refused 说明您的网络环境无法访问GitHub的SSH端口22&#xff0c;常见原因&#xff1a; 防火墙/网络运营商限制&#xff08;国内常见&#xf…...

【Linux】vim 设置

【Linux】vim 设置 零、起因 刚学Linux&#xff0c;有时候会重装Linux系统&#xff0c;然后默认的vi不太好用&#xff0c;需要进行一些设置&#xff0c;本文简述如何配置一个好用的vim。 壹、软件安装 sudo apt-get install vim贰、配置路径 对所有用户生效&#xff1a; …...

2025届开发岗秋招经验教训总结

实习 实习的作用&#xff1a; 学习知识&#xff0c;充实简历了解特定部门的氛围转正比秋招提前占坑提前展现工作能力&#xff0c;争取更高起薪 其中&#xff0c;除非有梦中情组&#xff0c;我认为占坑是最不重要的一个&#xff0c;因为现在的校招就业形势并未严峻到转正占满…...

Java 之集成 DataX 数据同步工具

1、官网下载 DataX https://github.com/alibaba/DataX 2、将依赖添加到本地&#xff08;DataX没有maven坐标&#xff0c;需要自己安装&#xff09; mvn install:install-file -Dfile"datax-common-0.0.1.jar" "-DgroupIdcom.datax" "-DartifactIdda…...

JMH 详细使用

JMH 基本使用 官方地址 JMH 是一个用于 Java 代码微基准测试的工具&#xff0c;允许开发者对特定部分进行精确的性能测试&#xff1b; 安装 JMH 环境&#xff1a; Maven 项目&#xff1b;JDK 8&#xff1b; Maven 方式安装 引入如下依赖&#xff1a; <dependencies>…...

2025 PHP授权系统网站源码

2025 PHP授权系统网站源码 安装教程&#xff1a; PHP7.0以上 先上传源码到服务器&#xff0c;然后再配置伪静态&#xff0c; 访问域名根据操作完成安装&#xff0c; 然后配置伪静态规则。 Ngix伪静态规则&#xff1a; location / { if (!-e $request_filename) { rewrite …...

【对话推荐系统】Towards Topic-Guided Conversational Recommender System 论文阅读

Towards Topic-Guided Conversational Recommender System 论文阅读 Abstract1 Introduction2 Related Work2.1 Conversation System2.2 Conversational Recommender System2.3 Dataset for Conversational Recommendation 3 Dataset Construction3.1 Collecting Movies for Re…...

git 使用常见错误整理

1. git am 应用补丁时遇到错误 fatal: previous rebase directory .git/rebase-apply still exists but mbox given fatal:之前的变基目录 .git/rebase-apply仍然存在&#xff0c;但却提供了mbox 答&#xff1a;这通常是因为之前的 git am 或 git rebase 操作失败后&#xf…...

数据存储:一文掌握存储数据到mysql的详细使用

文章目录 一、环境准备1.1 安装MySQL数据库1.2 安装Python MySQL驱动 二、连接到MySQL数据库三、执行基本的CRUD操作3.1 创建&#xff08;Create&#xff09;&#xff1a;插入数据3.2 读取&#xff08;Read&#xff09;&#xff1a;查询数据3.3 更新&#xff08;Update&#xf…...

React 源码揭秘 | 更新队列

前面几篇遇到updateQueue的时候&#xff0c;我们把它先简单的当成了一个队列处理&#xff0c;这篇我们来详细讨论一下这个更新队列。 有关updateQueue中的部分&#xff0c;可以见源码 UpdateQueue实现 Update对象 我们先来看一下UpdateQueue中的内容&#xff0c;Update对象&…...

Vue3 + Vite + TS,使用 配置项目别名属性:resolve

使用 resolve 配置全局项目路径别名 1.优化了开发中单页面引用其他模块的路径复杂性 2.妥妥解决了&#xff0c;组件复用当中提高开发效率 // 不使用配置 import { useStore } from ../../../stores // 使用配置 可根据开发者需求任意定义&#xff0c;较多 import { useStore…...

使用 C# 以api的形式调用 DeepSeek

一&#xff1a;创建 API 密钥 首先&#xff0c;您需要来自 DeepSeek 的 API 密钥。访问 DeepSeek&#xff0c;创建一个帐户&#xff0c;并生成一个新的 API 密钥。 二&#xff1a;安装所需的 NuGet 包 使用 NuGet 包管理器安装包&#xff0c;或在包管理器控制台中运行以下命…...

手机放兜里,支付宝“碰一下”被盗刷?

大家好&#xff0c;我是小悟。 近期&#xff0c;网络上关于“支付宝‘碰一下’支付易被盗刷”的传言甚嚣尘上&#xff0c;不少用户对此心生疑虑。 首先&#xff0c;要明确一点&#xff1a;“碰一下”支付并不会像某些传言中所描述的那样容易被隔空盗刷。这一观点已经得到了支付…...

0x01 html和css

css 对于三种css使用方式&#xff1a; 第一种&#xff1a;行内样式 <span style"color: grey;">2024年05月15日 20:07</span>第二种&#xff1a;内部样式 <!DOCTYPE html> <html lang"en"> <head>...<style>span{…...

模型和数据集的平台之在Hugging Face上进行模型下载、上传以及创建专属Space

模型下载 步骤&#xff1a; 注册Hugging Face平台 https://huggingface.co/ 新建一个hf_download_josn.py 文件 touch hf_download_josn.py 编写hf_download_josn.py文件 import os from huggingface_hub import hf_hub_download# 指定模型标识符 repo_id "inter…...

轮式机器人在复杂地形中如何选择合适的全局路径规划算法?

已思考完成 收起 嗯&#xff0c;用户问的是轮式机器人在复杂地形中如何选择合适的全局路径规划算法。首先&#xff0c;我需要理解复杂地形可能带来的挑战&#xff0c;比如崎岖的路面、动态障碍物、非结构化环境等等。轮式机器人在这里的运动控制需要考虑地形通过性、稳定性&…...

免费使用 DeepSeek API 教程及资源汇总

免费使用 DeepSeek API 教程及资源汇总 一、DeepSeek API 资源汇总1.1 火山引擎1.2 百度千帆1.3 阿里百炼1.4 腾讯云 二、其他平台2.1 华为云2.2 硅基流动 三、总结 DeepSeek-R1 作为 2025 年初发布的推理大模型&#xff0c;凭借其卓越的逻辑推理能力和成本优势&#xff0c;迅速…...

文献汇总|AI生成图像检测相关数据集汇总

前言&#xff1a;本博客汇总当前AI生成图像检测领域用到的数据集及相关链接。 ⚠️&#xff1a;除标注「未公开」数据集&#xff0c;其余数据集均已开源。 目录 2020202220232024 2020 CNNSpot https://github.com/peterwang512/CNNDetection Testset: The zip file contains …...

C# 弃元的使用

总目录 前言 在C# 7.0及更高版本中&#xff0c;弃元&#xff08;Discard&#xff09;是一个新的语言特性&#xff0c;允许开发者在特定情况下忽略某些值。弃元用下划线 _ 作为占位符&#xff0c;明确表示忽略某个值&#xff0c;提升代码可读性 一、弃元是什么&#xff1f; 1.…...

蓝桥杯备考:贪心算法之矩阵消除游戏

这道题是牛客上的一道题&#xff0c;它呢和我们之前的排座位游戏非常之相似&#xff0c;但是&#xff0c;排座位问题选择行和列是不会改变元素的值的&#xff0c;这道题呢每每选一行都会把这行或者这列清零&#xff0c;所以我们的策略就是先用二进制把选择所有行的情况全部枚举…...

React面试(一)

文章目录 1.vue和react有什么异同2.useEffect中为什么不能使用异步3.useEffect和useLayoutEffect的区别4.react的生命周期5.state和prop的区别6.受控组件和非受控组件7.为什么react16之后不把事件挂载到document上了8.讲一下react的hoc&#xff0c;它可以用来做什么&#xff1f…...

《解锁AI密码,机器人精准感知环境不再是梦!》

在科技飞速发展的当下&#xff0c;人工智能与机器人技术的融合正深刻改变着世界。其中&#xff0c;人工智能助力机器人实现更精准的环境感知&#xff0c;已成为该领域的核心课题&#xff0c;吸引着全球科研人员与科技企业的目光。这不仅关乎机器人能否在复杂环境中高效执行任务…...

C/C++语言知识点二

1. 编程算法之“哨兵”思想 哨兵思想是一种编程技巧&#xff0c;通过在数据结构的边界或特定位置放置一个特殊值&#xff08;称为“哨兵”&#xff09;&#xff0c;来简化逻辑判断和提高代码效率。哨兵通常是一个标记值&#xff0c;用于指示某种条件或边界&#xff0c;从而避免…...

【SpringBoot】——分组校验、自定义注解、登入验证(集成redis)、属性配置方式、多环境开发系统学习知识

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大三学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…...

【EB-03】 AUTOSAR builder与EB RTE集成

AUTOSAR builder与EB RTE集成 1. Import Arxml files to Tresos2. Run MultiTask Script3. Add Components3.1 Run EcuExtractCreator Script4. Mapping Component to Partitions5. Event Mapping/Runnables Mapping to Tasks6. Port Connect7. Run SvcAs_Trigger Script8. Ver…...

布署elfk-准备工作

建议申请5台机器部署elfk&#xff1a; filebeat(每台app)--> logstash(2台keepalived)--> elasticsearch(3台)--> kibana(部署es上)采集输出 处理转发 分布式存储 展示 ELK中文社区: 搜索客&#xff0c;搜索人自己的社区 官方…...

JVM垃圾回收器深度底层原理分析与知识体系构建

一、垃圾回收的基本步骤 标记&#xff08;Marking&#xff09; 从GC Roots&#xff08;如虚拟机栈、方法区静态变量、本地方法栈等&#xff09;出发&#xff0c;遍历对象引用链&#xff0c;标记所有可达对象为存活对象&#xff0c;未被标记的则视为垃圾。此阶段需暂停用户线程&…...

Flutter系列教程之(5)——常用控件Widget的使用示例

目录 1.页面跳转 2.某个控件设置点击事件 3.AlertDialog对话框的使用 4.文本输入框 5.按钮 圆角扁平按钮: 圆角悬浮按钮: 6.补充 圆点 7.布局使用 Row控件左右对齐 调整边距 1.页面跳转 首先&#xff0c;先介绍一下页面跳转功能吧 Flutter使用 Navigator 进行页面…...

快手前端通用静态托管服务KFX演进历程:从崎岖土路到平坦高速

快手静态部署托管服务&#xff08;KFX&#xff09;历经四年发展&#xff0c;经历了三个阶段&#xff0c;一步步从勉强能行车的“崎岖土路”到现在多车道并行的“平坦高速”&#xff0c;这一转变极大地提升了资源利用率和效率&#xff0c;满足业务的实际需要。本文将带你了解其背…...

hackmyvm-buster

题目地址 信息收集 主机发现 ┌──(root㉿kali)-[/home/kali] └─# arp-scan -I eth1 192.168.56.0/24 Interface: eth1, type: EN10MB, MAC: 00:0c:29:34:da:f5, IPv4: 192.168.56.103 WARNING: Cannot open MAC/Vendor file ieee-oui.txt: Permission denied WARNING: C…...

React加TypeScript最新部署完整版

React TypeScript 全流程部署指南 一、环境准备与项目初始化 关于node.js及npm的安装请参见我的文章。 1.1 创建项目&#xff08;React TypeScript&#xff09; # 使用官方推荐脚手架&#xff08;Vite 5.x&#xff09; npx create-vitelatest my-app --template react-ts …...

DeepSeek-R1-Zero:基于基础模型的强化学习

注&#xff1a;此文章内容均节选自充电了么创始人&#xff0c;CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》&#xff08;人工智能科学与技术丛书&#xff09;【陈敬雷编著】【清华大学出版社】 文章目录 DeepSeek大模型技术系列四DeepSeek大模型技术系列四》DeepSeek-…...

python的列表和元组别再傻傻分不清啦

目录 什么是下标&#xff1a; 正数索引&#xff1a;正数索引从左到右&#xff0c;从 0 开始。 负数索引&#xff1a;负数索引从右到左&#xff0c;从 -1 开始。 切片&#xff08;slice&#xff09;&#xff1a;除了单个元素&#xff0c;Python还支持通过切片访问序列的子集。…...

Fiddler在Windows下抓包Https

文章目录 1.Fiddler Classic 配置2.配置浏览器代理自动代理手动配置浏览器代理 3.抓取移动端 HTTPS 流量&#xff08;可选&#xff09;解决抓取 HTTPS 失败问题1.Fiddler证书过期了 默认情况下&#xff0c;Fiddler 无法直接解密 HTTPS 流量。需要开启 HTTPS 解密&#xff1a; 1…...

【超详细】神经网络的可视化解释

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

LVS+Keepalived 高可用集群搭建

一、高可用集群&#xff1a; 1.什么是高可用集群&#xff1a; 高可用集群&#xff08;High Availability Cluster&#xff09;是以减少服务中断时间为目地的服务器集群技术它通过保护用户的业务程序对外不间断提供的服务&#xff0c;把因软件、硬件、人为造成的故障对业务的影响…...

使用git管理uniapp项目

1.本地管理 1. 在项目根目录中新建 .gitignore 忽略文件&#xff0c;并配置如下&#xff1a; # 忽略 node_modules 目录 /node_modules /unpackage/dist 2. 打开终端&#xff0c;切换到项目根目录中&#xff0c;运行如下的命令&#xff0c;初始化本地 Git 仓库&#xff1…...

回调函数的用法

回调函数的基本用法 回调函数是一种被作为参数传递给另一个函数的函数&#xff0c;接收回调函数作为参数的函数在合适的时候会调用这个回调函数。回调函数为代码提供了更高的灵活性和可扩展性&#xff0c;下面为你详细介绍回调函数的基本用法。 基本概念 回调函数的核心在于函…...

样式垂直居中,谁才是王者

样式垂直居中&#xff0c;谁才是王者 面试官 常问如何让元素垂直居中&#xff0c;这其实是个经典的前端问题。 实现垂直居中的方法多种多样&#xff0c;从传统的表格布局到现代的Flexbox、Grid布局&#xff0c;再到绝对定位配合transform&#xff0c;甚至是line-height技巧&am…...

五、Three.js顶点UV坐标、纹理贴图

一部分来自1. 创建纹理贴图 | Three.js中文网 &#xff0c;一部分是自己的总结。 一、创建纹理贴图 注意&#xff1a;把一张图片贴在模型上就是纹理贴图 1、纹理加载器TextureLoader 注意&#xff1a;将图片加载到加载器中 通过纹理贴图加载器TextureLoader的load()方法加…...

Linux Kernel Connection Tracking Table

在 Linux 内核中&#xff0c;连接跟踪表&#xff08;Connection Tracking Table&#xff0c;简称 conntrack&#xff09;是一个用于跟踪网络连接状态的核心组件。它主要由 Netfilter 框架管理&#xff0c;广泛应用于防火墙、NAT&#xff08;网络地址转换&#xff09;和负载均衡…...

NavVis VLX三维扫描:高层建筑数字化的革新力量【沪敖3D】

在三维激光扫描领域&#xff0c;楼梯结构因其复杂的空间形态和连续垂直移动的实际需求&#xff0c;一直是技术难点之一。利用NavVis VLX穿戴式移动扫描系统成功完成一栋34层建筑的高效扫描&#xff0c;其中楼梯部分的数据一遍成形且无任何分层或形变。本文将深入分析该项目的技…...

JVM生产环境问题定位与解决实战(二):JConsole、VisualVM到MAT的高级应用

生产问题定位指南&#xff1a;几款必备的可视化工具 引言 在上一篇文章中&#xff0c;详细的介绍了JDK自带的一系列命令行工具&#xff0c;&#xff0c;如jps、jmap、jstat、jstack以及jcmd等&#xff0c;这些工具为排查和诊断Java虚拟机&#xff08;JVM&#xff09;问题提供…...

【深入理解JWT】从认证授权到网关安全

最近的项目学习中&#xff0c;在进行登陆模块的用户信息验证这一部分又用到了JWT的一些概念和相关知识&#xff0c;特在此写了这篇文章、方便各位笔者理解JWT相关概念 目录 先来理解JWT是什么&#xff1f; 区分有状态认证和无状态认证 有状态认证 VS 无状态认证 JWT令牌的…...

esp工程报错:something went wrong when trying to build the project esp-idf 一种解决办法

最近上手了正点原子esp32s3板子&#xff0c;环境采用的是vscodeesp-idf插件。导入了正点原子的demo测试&#xff0c;每次都报这个错误无法建造。也不是网上说的ninja error&#xff0c;不是中文路径的问题。 在终端中查看&#xff0c;发现是缺少了git。&#xff08;我这里没有…...

基于MATLAB红外弱小目标检测MPCM算法复现

摘要&#xff1a;本文详细介绍了一种基于人类视觉系统特性的红外弱小目标检测算法——Multiscale patch-based contrast measure (MPCM)。该算法通过增强目标与背景的对比度&#xff0c;有效检测红外图像中的弱小目标&#xff0c;并在MATLAB环境中进行了复现与实验验证。 关键…...

java基础面试篇

目录 1.概念 1.1说一下Java的特点 1.2Java为什么是跨平台的&#xff1f; 1.3 JVM、JDK、JRE三者关系&#xff1f; 1.4为什么Java解释和编译都有&#xff1f; 1.5 jvm是什么&#xff1f; 1.6 编译型语言和解释型语言的区别&#xff1f; 1.7 Python和Java区别是什么&#…...

Java Map实现类面试题

Java Map实现类面试题 HashMap Q1: HashMap的实现原理是什么&#xff1f; HashMap基于哈希表实现&#xff0c;使用数组链表红黑树&#xff08;Java 8&#xff09;的数据结构。 public class HashMapPrincipleExample {// 模拟HashMap的基本结构public class SimpleHashMap&…...