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

App窗口创建流程(Android12 )

有关的窗口对象

PhoneWindowActivityThread#performLaunchActivity {Activity.attach}
Surface
  1. new ViewRootImpl 创建null对象
  2. mSurface.transferFrom(getOrCreateBLASTSurface())//填充内容
  3. 创建native层的Surface
LayerSurfaceFlinger::createLayer
RenderSurfaceSurfaceFlinger gpu合成layer之后的数据管理类
FramebufferSurfaceFramebuffer管理类,负责消费合成的layer数据,送显
SurfaceControlViewRootImpl#relayoutWindow{mSurface.copyFrom(mSurfaceControl)}  //改变Surface buffer属性
IWindowSessionnew ViewRootImpl(contexst, display, WindowManagerGlobal.getWindowSession())
WindowManagerGlobal

ActivityThread#handleLaunchActivity

 {WindowManagerGlobal.initialize()}

App窗口完整创建流程

Launcher#startActivity() -> SystemServer -> zygote newProcess

->App #newActivityThread.main() ->ActivityThread#handleLaunchActivity

-> ActivityThread.performLaunchActivity

{

       WindowManagerGlobal.initialize()

       newActivity().attach(context)

}

->ActivityThread#handleResumeActivity->wm.addView(decor

->WindowManagerGlobal.addView(WindowManagerGlobal.setView

{
      new ViewRootImpl()#setView  ->  requestlayout ->  performTraversals  ->  relayoutWindow()

mWindowSession.relayout(mSurfaceControl -> wms.relayout 开始创建SurfaceControl和Layer

}

创建SurfaceControl过程:

  • mWindowSession.relayout(mSurfaceControl
  • -> wms.createSurfaceControl()
  • ->mSurfaceControl = WindowStateAnimator.createSurfaceLocked//开始创建Surface
  • ->mSurface.copyFrom(mSurfaceControl) //把mSurfaceControl复制到ViewRootImpl对象的mSurface里面后续操作window使用

从wms.createSurfaceLocked ~ SurfaceFlinger::createLayer 如图所示

Surface创建流程见App申请Surface流程(Android12 )-CSDN博客

部分资料参考于:Android14 SurfaceFlinger Surface的创建_pendingbuffercounter-CSDN博客


http://www.mrgr.cn/news/82742.html

相关文章:

  • Docker 中启动 Nacos
  • 期末速成C++【大题汇总完】
  • 【C语言程序设计——入门】C语言入门与基础语法(头歌实践教学平台习题)【合集】
  • js逆向实战(1)-- 某☁️音乐下载
  • 【yolov8自卸卡车-挖掘机-装载机检测】
  • 【机器遗忘之UNSIR算法】2023年IEEE Trans期刊论文:Fast yet effective machine unlearning
  • (已开源-AAAI25) RCTrans:雷达相机融合3D目标检测模型
  • 【设计模式-1】软件设计模式概述
  • 【Python】绿色便携版Python制作(发布)方法
  • Oracle Dataguard(主库为单节点)配置详解(2):配置主库
  • 智能工厂的设计软件 应用场景的一个例子: 为AI聊天工具添加一个知识系统 之21 再次重建 之6 整“拼” 项目文档+程序框架 总述
  • 【Linux】函数
  • 1.2.1-2部分数据结构的说明02_链表
  • 简历_专业技能_熟悉分布式锁Redisson的原理以及使用
  • QML学习(七) 学习QML时,用好Qt设计器,快速了解各个组件的属性
  • 使用Dinky快速提交Flink operator任务
  • Elasticsearch 入门教程
  • Unity2D初级背包设计中篇 MVC分层撰写(万字详解)
  • 音视频-----RTSP协议 音视频编解码
  • VisualRules规则引擎语法介绍
  • Linux(Ubuntu24.04)源码编译安装VTK7.1.1记录
  • 源代码编译安装X11及相关库、vim,配置vim(2)
  • Qt 5.14.2 学习记录 —— 사 信号与槽机制(1)
  • 部署API式机器学习模型并接入AI agent
  • BurpSuite工具安装
  • 在 macOS 中,设置自动将文件夹排在最前