SurfaceFlinger实战dump获取单个Layer图像方案学员改进成果

背景:

hi,粉丝朋友们:
在马哥课程的实战实现dump单个图层的发布后,很多学员朋友就纷纷享马哥要了相关源码,相关的链接请参考这里:

https://blog.csdn.net/learnframework/article/details/136323076

学员朋友们拿到后也进行了认真的实战开发,而且针对马哥提供方案也做了一些改进,下面就分享一下两个学员朋友等改进建议。

学员1改进方案:

以下是学员提出的一些意见:
在这里插入图片描述核心修改意见在于:
在这里插入图片描述
原来这里直接return 0,这里还是会影响其他dumpsys SurfaceFlinger带参数的命令会波及。
所以这个学员朋友就对这里进行了改进,减少波及:
在这里插入图片描述
这里就把dumpsys 命令放入达到了和–vsync等一样的扩展参数里面。

相对来说这样可以减少波及,更加规范化,符合公司里面正式上项目的标准。

还有一个就是名字dumpsys单个Layer时候需要完整的Layer名字的,但是每次的Layer名字重启或者销毁后都是不一样的,都需要进行重新获取Layer名字才可以可以截图。
改进方案:
字符由原来的全匹配变成模糊匹配部分匹配

方案可能存在缺陷:
完全有可能存在两个Layer名字上有较大的相似度,例如:
在这里插入图片描述明显可以看出来这里的MainActivity这个图层,就有一个SurfaceView和一个正常的Activity,如果只是以com.example.myapplication11.MainActivity这个字符串来进行匹配的话,那么你就无法确定到底截图是谁。

学员2改进方案:

改进背景出发点:
针对马哥的传递名字是通过dumpsys SurfaceFlinger方式传递,而且截图前还需要调用dumpsys SurfaceFlinger,感觉不那么方便,是否可以考虑改造成直接screencap一个命令进行传递相关Layer名字呢?需要在开始和结束时候调用相关的dumpsys SurfaceFlinger命令呢?

哈哈当然是可以,只不过修改模块就需要多一个模块,那就是sreencap.cpp这个源码

在这里插入图片描述

代码波及两个地方后,就可以实现让screencap时候传递对应的Layer名字既可以

总结:

感谢2位学员朋友在学习马哥课程时候,针对马哥的实战项目案例等,进行了实战,而且还是认真进行学习和改进,而且把它做成商业化的项目。这也是马哥最希望看到的,不希望大家拿着现成的代码或者patch,进行apply后编译通过,运行ok,就再也不管了。
实际上这种直接拿代码运行对于学员是非常不好,我还是建议大家老老实实跟着敲一边代码,不要偷懒,毕竟跟着做你才可以有自己思考,才会想出改进方案。

本文章更多详细代码和资料需要购买课程获取
hal+perfetto+surfaceflinger
https://mp.weixin.qq.com/s/LbVLnu1udqExHVKxd74ILg
在这里插入图片描述

私聊作者+v(androidframework007)

其他课程七件套专题:在这里插入图片描述
点击这里
https://mp.weixin.qq.com/s/Qv8zjgQ0CkalKmvi8tMGaw

视频试看:
https://www.bilibili.com/video/BV1wc41117L4/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/470897.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

前端项目,个人笔记(三)【Vue-cli - api封装-axios使用举例】

目录 前言 1、axios配置与测试 1.1、配置 1.2、测试 2、使用axios案例-渲染header 3、Pinia优化重复请求 3.1、为什么? 3.2、使用Pinia优化代码步骤 步骤一:在main.js中创建 Pinia 实例,并将其作为插件添加到 Vue 应用中 步骤二&am…

【QT+QGIS跨平台编译】之八十四:【QGIS_Gui跨平台编译】—【错误处理:未实例化QgsMapLayer - QgsHighlight】

文章目录 一、未实例化QgsMapLayer二、错误处理 一、未实例化QgsMapLayer 报错信息: 二、错误处理 第31行修改为: #include "qgsmaplayer.h"

【Leetcode】2684. 矩阵中移动的最大次数

文章目录 题目思路代码结果 题目 题目链接🔗 给你一个下标从 0 开始、大小为 m x n 的矩阵 grid ,矩阵由若干 正 整数组成。 你可以从矩阵第一列中的 任一 单元格出发,按以下方式遍历 grid : 从单元格 (row, col) 可以移动到 (…

Flutter-仿携程首页类型切换

效果 唠叨 闲来无事,不小心下载了携程app,还幻想可以去旅游一番,奈何自己运气不好,自从高考时第一次吹空调导致自己拉肚子考试,物理,数学考了一半就交卷,英语2B铅笔除了问题,导致原…

MySQL数据库的基本概念与安装

目录 引言 一、数据库的基本概念 (一)数据、表与数据库 1.数据(Data) 2.表 3.数据库 (二)数据库管理系统 (三)数据库系统 二、数据库的发展 三、主流数据库的介绍 (一)关…

一命通关深度优先遍历

前言 在解释深度优先遍历之前,我想先让大家去思考一个可能从未想过的问题: 为什么我们在学习基础数据结构的时候,都没有出现dfs和bfs这两个词,而在学习二叉树和图的时候,突然蹦出了深度优先遍历和广度优先遍历这两个…

力扣 第 126 场双周赛 解题报告 | 珂学家 | 贡献法思维场 + 贪心构造 + 0-1背包

前言 整体评价 T3是道好题,一开始思路偏了往按字母前缀和和DP去想了,但是感觉很难下手,后来发现从贡献的角度,其实和位子无关系,只需要贪心即可。 T4也是一道贡献思路题,理清核心的点,就能简单…

Vue项目使用process.env关键字及Vue.config.js配置解决前端跨域问题

1.process.env 是Node.js 中的一个环境 1.打开命令行查看环境: 2.process.env与Vue CLI 项目 Vue Cli 有以下三种运行模式 development 模式用于 vue-cli-service serve test 模式用于 vue-cli-service test:unit production 模式用于 vue-cli-service build 和 vue-cli-se…

每日一练:LeeCode-167. 两数之和 II - 输入有序数组【双指针】

给你一个下标从 1 开始的整数数组 numbers &#xff0c;该数组已按 非递减顺序排列 &#xff0c;请你从数组中找出满足相加之和等于目标数 target 的两个数。如果设这两个数分别是 numbers[index1] 和 numbers[index2] &#xff0c;则 1 < index1 < index2 < numbers.…

如何本地部署1Panel面板

文章目录 前言1. Linux 安装1Panel2. 安装cpolar内网穿透3. 配置1Panel公网访问地址4. 公网远程访问1Panel管理界面5. 固定1Panel公网地址 前言 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器&#xff0c;包括主机监控、…

YOLOv8改进 | 主干篇 | 利用图像分割网络UNetV2改善图像分割检测性能(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是利用图像分割网络UNetV2的主干来改进我们的YOLOv8分割模型&#xff08;本文的内容虽然YOLOv8所有的功能的用户都能使用&#xff0c;但是还是建议分割的用户使用&#xff09;&#xff0c;U-Net v2 旨在改进医学图像分割的性能&#xff…

C# 方法(函数)

文章目录 C# 方法&#xff08;函数&#xff09;简单示例程序代码运行效果 值传递和引用传递示例程序 运行效果按输出传递参数运行结果 C# 方法&#xff08;函数&#xff09; 简单示例 程序代码 访问的限制符 using System; using System.Collections.Generic; using Syste…

GO-初识包管理

初识包管理&#xff0c;知道项目中文件和文件夹之间的关系 输出&#xff0c;代码&#xff0c;在go编译器运行时会显示在屏幕中 初识数据类型 整型&#xff0c;数字。例如&#xff1a;1、2、3、4 字符串类型&#xff0c;表示文本信息的。例如:“张三”“李四” 布尔类型&#x…

Day51-Nginx多实例知识与大厂企业级实战

Day51-Nginx多实例知识与大厂企业级实战 1. 什么是nginx多实例&#xff1f;2. 为什么要用多实例&#xff1f;3. 大厂数百个业务项目&#xff0c;如何来管理&#xff1f;4. 大厂上百项目web分用户解决方案4.1 编译nginx环境实践&#xff1a;4.2 zuma实例(利用普通用户权限将不同…

Arduino 开发 野火ESP8266模块的串口通信

一、硬件连接 Arduino ESP8266 串口通信是一个常见的任务&#xff0c;允许通过串行接口与其他设备或计算机进行通信。 连接硬件&#xff1a;将野火ESP8266模块通过USB连接到电脑。注意电源为3.3V。 选择开发板和端口&#xff0c;在Arduino IDE中&#xff0c;选择ESP8266开发板…

图神经网络实战(5)——常用图数据集

图神经网络实战&#xff08;5&#xff09;——常用图数据集 0. 前言0. 图数据集介绍2. Cora 数据集3. Facebook Page-Page 数据集小结系列链接 0. 前言 图数据集往往比单纯的连接集合更丰富&#xff0c;节点和边也可以具有表示分数、颜色、单词等的特征。在输入数据中包含这些…

NLP---Bert分词

目录&#xff1a; Q&#xff1a;bert分词步骤1&#xff1a;构建N * N 的相关性矩阵&#xff0c;计算相邻两个字的相关性&#xff0c;低的话&#xff08;<阈值&#xff09;就切割。2&#xff1a;将A词进行mask计算出A的embedding&#xff0c;然后将AB两个词一起mask&#xff…

【滑动窗口】长度最小的子数组|无重复字符的最长子串|最大连续1的个数 III|将 x 减到 0 的最小操作数

1. 长度最小的子数组 - 力扣&#xff08;LeetCode&#xff09; 1.题目解析&#xff1a; 2.算法原理 &#xff08;1&#xff09;方法一&#xff1a;暴力列举出所有的子数组的和 时间复杂度&#xff1a;O&#xff08;n**2&#xff09;&#xff1a;枚举所有子数组O&#xff08;…

使用 Redux 管理 React 应用状态

使用 Redux 管理 React 应用状态 在复杂的 React 应用中&#xff0c;管理组件状态变得越来越复杂&#xff0c;这时候引入 Redux 可以帮助我们更好地管理状态。Redux 是一个可预测状态容器&#xff0c;它可以帮助我们统一管理应用的状态&#xff0c;使得状态变化更加可控。本文…

机器学习基本算法(一)

1.线性回归算法 Linear Regression 线性回归算法&#xff08;Linear Regression&#xff09;是一种预测性的建模技术&#xff0c;它研究的是因变量&#xff08;目标&#xff09;和自变量&#xff08;预测器&#xff09;之间的关系。线性回归假设目标值与特征之间线性相关&…