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

【Android】View#post执行时机浅谈

一,概述

view.post传入一个Runnable,一般在view即将显示时,会调用Runnable,本文结合源码浅谈下post时机。

二,源码

1,每个View被添加到window时,都会保存一个AttachInfo,这个AttachInfo在View#dispatchWindowAttach时赋值,一个Window对应一个ViewRootImpl,在ViewRootImpl的构造方法中,创建了一个实例,如下

AttachInfo保存了WindowSession、IWindow.Stub、Display等信息,如下

AttachInfo确认了一个View所在Surface的物理参数集合,同WMS通信的Binder等信息。

那么何时AttachInfo被赋值给子View?

答案是View#dispatchAttachedToWindow回调

此回调在ViewRootImpl#performTraversals中被执行,从host,即顶层View(setView赋值给ViewRootImpl)下方到View树。且执行时机早于performLayout流程。

而众所周知,Developer一般在LifeCycler#Resume中,performTraversals未开始,因此,通过post方式就能在attach时,执行指定逻辑,笔者进一步跟进当mAttachInfo未附加时的情况,即2

2,通过RunQueue添加此次action,

这是一个HandlerActionQueue,本质就是一个数组构成的Queue,用来存储Runnable

那么这个队列和mAttachInfo#handler什么关系?

在ViewRootImpl#performTraversals中,当dispatchAttachedToWindow后,便会拿到这个Queue,执行executeActions方法,传入的mAttacher#mHandler对象,

很简单,只是简单将RunQueue的Runnable再次存放进Handler对应的MessageQueue中,

而此次是在ViewRootImpl#performTraversals添加到MessageQueue,意味着必须等待View树三大流程(layout、measure、draw)执行完毕后,才会执行到传入的Runnable。

以上分析完毕,直接说结论

三,结论

View#post的Runnable,最早在ViewRootImpl#performTraversals执行完毕后,从MessageQueue顺序执行

http://www.dtcms.com/a/329912.html

相关文章:

  • Chrome 插件开发实战
  • 高防IP的防护原理是什么?
  • 基于51单片机WIFI遥控防盗电子密码锁APP控制设计
  • 免费专业PDF文档扫描效果生成器
  • docker代码如何在vscod上修改
  • 三方相机问题分析六:【没用相机,诡异的手电筒不可使用】下拉状态栏,手电筒置灰,无法打开,提提示相机正在使用
  • RAG-Fusion 实战:检索召回率提升新方案
  • 数据分析小白训练营:基于python编程语言的Numpy库介绍(第三方库)(下篇)
  • 智能制造数字孪生最佳交付实践:打造数据融合×场景适配×持续迭代的数字孪生框架
  • 计算机二级 Web —— HTML 全面精讲(含真题实战)
  • 2020/12 JLPT听力原文 问题一 5番
  • Unity3d UGUI图片按钮只有非透明区域(透明阈值)可以点击功能实现(含源码)
  • OSG —— Windows11下Vs2017完美编译Osg3.6.5+osgQt(附:Osg+osgQt测试用例)
  • GLSL学习
  • IPO辅导四年半,马上消费何时“马到成功”?
  • 深度解析:DCF估值模型实战指南 ——以Kappa Pi Therapeutics为例的完整估值建模过程
  • 万字长文全解析:五种主流归一化方法深入讲解(BN/LN/IN/GN/WN)
  • html img标签设置默认图片,防止图片路径不存在导致图片不展示影响页面美观
  • 微服务单元测试组件
  • 二分|回溯
  • 了解 Linux 中的 /usr 目录以及 bin、sbin 和 lib 的演变
  • C++算法·递推递归
  • 基于.Net Framework4.5 Web API 引用Swagger
  • HCIP——OSPF综合实验
  • 药房智能盘库系统:基于CV与时间序列预测的库存革命
  • 蓝蜂网关在雄安新区物联网建设中的关键应用
  • Vue内置组件全解析:从入门到面试通关
  • 用 OPC UA C# WinForm 的单节点订阅方法
  • 【个人项目】跑者天地—测试用例
  • AI搜索的极限优化、新兴技术、硬件加速、特定行业解决方案