searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Activity显示过程中主要类之间的关系

2023-11-21 09:18:50
5
0

Activity完成和AMS的绑定并走到Activity生命周期的onCreate-onResume后的界面显示过程是怎样的?
首先分析下在界面显示过程中主要类之间的关系。

 

  • Window是一个抽象类,通过控制DecorView提供了一些标准的UI方案,比如背景、标题、虚拟按键等,而PhoneWindow是Window的唯一实现类,在Activity创建后的attach流程中创建,应用启动显示的内容装载到其内部的mDecor(DecorView);
  • DecorView是整个界面布局View控件树的根节点,通过它可以遍历访问到整个View控件树上的任意节点;
  • WindowManager是一个接口,继承自ViewManager接口,提供了View的基本操作方法;WindowManagerImp实现了WindowManager接口,内部通过组合方式持有WindowManagerGlobal,用来操作View;WindowManagerGlobal是一个全局单例,内部可以通过ViewRootImpl将View加至窗口中;
  • ViewRootImpl是所有View的Parent,用来总体管理View的绘制以及与系统WMS窗口管理服务的IPC交互从而实现窗口的开辟;ViewRootImpl是应用进程运转的发动机,可以看到ViewRootImpl内部包含mView(就是DecorView)、mSurface、Choregrapher,mView代表整个控件树,mSurfacce代表画布,应用的UI渲染会直接放到mSurface中,Choregorapher使得应用请求vsync信号,接收信号后开始渲染流程;

交互流程

  1. Activity.onCreate.attach阶段:实例化Window(PhoneWindow),绑定WindowManager(WindowManagerImpl-WindowManagerGlobal)
  2. Actiivty.onCreate.setContentView阶段:绑定Window(PhoneWindow)和View(DocorView)
  3. Activity.onResume阶段一:WindowManager.addView,实例化ViewRootImpl,通过ViewRootImpl.setView绑定ViewRootImpl和DecorView
  4. Actiivty.onResume阶段二:WindowManager.addView,绑定WindowManagerImpl、WindowManagerGlobal、DecorView、ViewRootImpl四者的关系
0条评论
0 / 1000
hi_long
13文章数
0粉丝数
hi_long
13 文章 | 0 粉丝