【Android面试八股文】自定义View执行invalidate()方法为什么有时候不会回调onDraw()?

文章目录

  • 一、自定义View执行invalidate()方法为什么有时候不会回调onDraw()?
    • 1.1 invalidate 软件绘制流程
    • 1.2 invalidate源码分析
      • 1.2.1 skipInvalidate()方法
      • 1.2.2 invalidateChild方法
        • 1.2.2.1 硬件加速绘制
        • 1.2.2.2 软件刷新
      • 1.2.3 小结

一、自定义View执行invalidate()方法为什么有时候不会回调onDraw()?

首先我们分析一下invalidate()的执行流程,源码是如何从invalidate调用到onDraw()的。由于这部分代码相对较为复杂,那么请大家参考下面的时序图。

1.1 invalidate 软件绘制流程

invalidate 软件绘制流程如下所示:
在这里插入图片描述
从上面的流程不难发现:

  1. viewinvalidate会逐层找parent一直找到DecorViewDecorView是顶层view,它有个虚拟父viewViewRootImpl

    ViewRootImpl不是一个View或者ViewGroup,它的成员mView就是DecorView,然后再由ViewRootImpl将所有的操作从ViewRootImpl自上而下开始分发,最终分发给所有的View

  2. View

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

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

相关文章

论文《Universal Graph Convolutional Networks》笔记

【UGCN】论文提出一个基本问题,即是否不同的网络结构属性应该采用不同的传播机制。通过实验发现,对于完全同配性、完全异配性和随机性的网络,1-hop、2-hop和k-nearest neighbor(kNN)邻居分别更适合作为信息传播的邻域。…

怎么优化ArcEngine组件开发mfc程序界面?

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…

【Linux详解】缓冲区优化 | 进度条的实现 | Linux下git 的上传

目录 一. 缓冲区 1. 缓冲区概念 2. 缓冲区作用 2.1 提升读写效率 2.2 减少等待时间 3. 缓冲区刷新策略 3.4 特殊策略 4. 缓冲区存储位置 5. 总结 二. 实现进度条 引入:倒计时 process.c 三. Linux下git的上传 sum 一. 缓冲区 1. 缓冲区概念 缓冲区是…

数据库设计文档编写

PS:建议使用第三种方法 方法1:使用 Navicat 生成数据库设计文档 效果 先看简单的效果图,如果效果合适,大家在进行测试使用,不合适直接撤退,也不浪费时间。 随后在docx文档中生成目标字段的表格&#xf…

【必看】每个开发人员都应该知道的 10 个 GitHub 库

GitHub🌟:155K 被难题困住了?还是需要一些建议来指导你进入开发者行业?这个 仓库 将为你提供帮助。它拥有想要成为前端、后端或 DevOps 工程师需要的所有技术。你可以选择符合需求的或适合自己的,因为它提供了多种多…

npm全局安装依赖指定存放文件目录

引言 学校机房,每次默认在c盘装完 电脑关机重启都得重新安装,十分麻烦 1-创建依赖安装/缓存目录 2-打开终端输入设置安装目录位置的命令 npm set cache \你创建的缓存文件目录\ npm set prefix \你创建的global全局安装依赖文件目录\至此以后npm -g 依…

ChatGPT-4o也参加高考了,还写了六大考卷的全部作文! |【WeThinkIn出品】

写在前面 【WeThinkIn出品】栏目专注于分享Rocky的最新思考与经验总结,包含但不限于技术领域。欢迎大家一起交流学习💪 欢迎大家关注Rocky的公众号:WeThinkIn 欢迎大家关注Rocky的知乎:Rocky Ding AIGC算法工程师面试面经秘籍分享…

腰背肌筋膜炎怎么治疗最有效

腰背肌筋膜炎的治疗方法主要包括以下几种: 1、休息和物理治疗: 确保充足的休息,避免过度劳累,减少腰背部肌肉的负担。 物理治疗,如热敷或冷敷,可以缓解疼痛和肌肉紧张。热敷可以使用热水袋、热毛巾或电热垫…

SyntaxWarning警告

为什么conda环境运行hipcc vector_add.cpp -o vector_add -v会出现: SyntaxWarning: invalid escape sequence \w staticVars(search_namere.compile("gfx[0-9a-fA-F](:[-:\w])?")) SyntaxWarning: invalid escape sequence \A line_search_term re…

React 中的服务器渲染组件

在前后分离架构以前,所有的 Html 业务都是后端渲染,返回前前端显示,后端渲染把前后端逻辑耦合在一起,增大系统的复杂度,不易于扩展。React 中的 Server组件,准确的说是服务器进行渲染,无论是什么…

【笔记】事务隔离级别以及MVCC解决幻读

事务提交可能碰到的问题: (1)脏读:事务1对数据进行修改但还没提交,事务2读取修改后的数据,之后事务1执行错误,回滚了,此时事务2的数据是错误的脏数据。 (2)不…

Pytest框架中pytest.mark功能

文章目录 mark功能 1. 使用pytest.mark.skip 2. 使用pytest.mark.skipif 3. 使用 pytest.mark.xfail 4使用pytest.mark.parametrize 5 使用pytest.mark.自定义标记 6 使用pytest.mark.usefixtures pytest 的mark功能在pytest官方文档是这样解释的: https://…

02--MySQL数据库概述

目录 第10章 子查询 10.1 SELECT的SELECT中嵌套子查询 10.2 SELECT的WHERE或HAVING中嵌套子查询 10.3 SELECT中的EXISTS型子查询 10.4 SELECT的FROM中嵌套子查询 第11章 MySQL支持的数据类型 11.1 数值类型:包括整数和小数 1、整数类型 2、bit类型 3、小数类型 11.2…

CSDN使用

注意群和其他广告提示。 审核不通过原因: 版权 广告

期货交易纪律2024年6月22号

文章目录 期货交易系统构建第一步、选品第二步、开仓纪律第三步、持仓 2024年6月22号,开始写期货交易的第三篇日记。 交易记录:市场继续震荡,这两天无交易,继续梳理一些期货交易选品,周末详细的了解了一下豆粕&#xf…

音频数据集1--LJSpeech单人语音

LJ Speech Dataset 版本号: 1.1 , 文件大小: 2.6GB 1.简介 1. 1 内容简介 LJS是一个语音数据集,包含 13,100 个音频片段,内容为Linda Johnson(欧美女性)朗读的 7 本书籍段落(非小说类)。每个片段都提供文本转录,片段长度从 1 到 10 秒不等&…

Java基础的重点知识-05-Scanner、Random、ArrayList类

文章目录 Scanner类Random类ArrayList类 Scanner类 一个可以解析基本类型和字符串的简单文本扫描器。 当我们要使用一个java.uitl包中的类的时候我们就需要导包。 想要用什么类就要进行导包 import java.util.Scanner;public class Main {public static void main(String[] …

学习笔记——路由网络基础——路由转发

六、路由转发 1、最长匹配原则 最长匹配原则 是支持IP路由的设备默认的路由查找方式(事实上几乎所有支持IP路由的设备都是这种查找方式)。当路由器收到一个IP数据包时,会将数据包的目的IP地址与自己本地路由表中的表项进行逐位(Bit-By-Bit)的逐位查找,…

实战篇:GY-906红外测温模块 + 万年历(定时器计数中断版本) -STM32篇

本文章基于兆易创新GD32 MCU所提供的2.2.4版本库函数开发 向上代码兼容GD32F450ZGT6中使用 后续项目主要在下面该专栏中发布: https://blog.csdn.net/qq_62316532/category_12608431.html?spm1001.2014.3001.5482 感兴趣的点个关注收藏一下吧! 电机驱动开发可以跳转…

Attention系列总结-粘贴自知乎

1. 梦想做个翟老师:阿里:Behavior Sequence Transformer 解读48 赞同 7 评论文章 优点:捕捉用户行为历史序列中的顺序信息。w2v也是捕捉用户序列信息的,本质差异在于啥? 添加图片注释,不超过 140 字(可选&#xff0…