Activity显示原理

####

Activity的显示原理(Window/DectorView/ViewRoot)
  1. activity.attach 生成个phonewindow

  2. activity.onCrate 生命周期

  3. setContentView 加载布局,会调用phonewindow创建dectorView(FrameLayout),加载布局到dectorView,生成个viewtree ,现在还没有显示

  4. handleResumeActivity onresume 之后,创建个ViewRootimpl把dectorView 添加到ViewRootImpl,交给ViewRootImpl管理,一个surface 一个ViewRootImpl,ViewRootImpl可以和WMS通信,相互调用

  5. viewRootImpl 触发requestLayout,

Activity的ui刷新机制(Vsync/Choreographer)
  1. requestLayout

  2. scheduleTraversals,会发一个屏障消息,阻塞普通消息,给ui绘制开个绿色通道

  3. 下次Vsync信号来的时候触发doTraversals调用

  4. performTraversals,真正执行绘制,第一次会像WMS申请一个surface,有了surface之后接下来绘制就会frameBuffer,之后提交到SurfaceFlinger 合成图像,写到屏幕缓冲区就会显示出来

  5. performMesaure

  6. performLayout

  7. perfromDraw

UI绘制原理(Measure/Layout/Draw)

测量,布局,绘制

Surface原理(Surface/SurfaceFlinger)

ViewRootImpl 第一次绘制的时候会像WMS申请窗口,WMS统一管理所有窗口大小层级