Activity的显示过程探究

xiaoxiao2021-02-28  109

 

一 ,Activity是如何显示的?

  Activity创建过程:执行handleLaunchActivity()方法,然后执行attach方法创建PhoneWindow,创建WindowManager对象(windowManager不是WMS的直接代理类,创建WindowManagerGlobal,调用WindowManagerGlobal,创建ViewRootImpl,调用ViewRootImpl)  setContentView过程:Activity.setContentView调用PhoneWindow.setContentView(生成DecorView)//生成DecorView,同时将layoutId指定的布局layout到DecorView,设置为DecorView的child。     resume过程:ActivityThread:handleResumeActivity调用Activity.makeVisible调用WindowManagerGlobal.addView调用ViewRootImpl.setView        ViewRootImpl.setView过程:1).requestLayout触发绘制流程 2).mWindowSession.addToDisplay通过IPC 执行WMS.addWindow

            4.1)requestLayout过程:relayoutWindow过程中app请求SurfaceFlinger创建Surface       4.2)mWindowSession.addToDisplay:最终执行WMS.addWindow方法,该方法流程最终建立了app与SurfaceFlinger服务连接。

    5.  requestLayout过程:调用ViewRootImpl.scheduleTraversals()调用Choreographer.postCallback()使用同步屏障(向主线程发送同步屏障msg)执行调用ViewRootImpl.doTraversal-调用ViewRootImpl.performTraversals执行真正测量,布局,绘制。                      5.1)requestLayout.performMeasure过程                      5.2)requestLayout.performLayout过程           5.3)requestLayout.performDraw过程         Surface请求native创建canvas,将canvas传给DectorView,依次遍历绘制子view。         Surface主要做两件事情:1.获取Canvas来干绘制的活;2.申请buffer,并把Canvas最终生产的图形、纹理数据放进去.         SurfaceFlinger在VSync新号的驱动下消费Surface产生的图形数据,合成,然后通过硬件绘制到屏幕         

 

二 .Activity和Window的关系 三.setContentView整个过程做了什么事情? 四.从进程的角度看app进程/system_server进程/SF进程如何协作的 五.View绘制的整体流程

 

 

转载请注明原文地址: https://www.6miu.com/read-35747.html

最新回复(0)