Activity的显示过程探究

53 篇文章 0 订阅
50 篇文章 0 订阅

 

一 ,Activity是如何显示的?

  1.   Activity创建过程:执行handleLaunchActivity()方法,然后执行attach方法创建PhoneWindow,创建WindowManager对象(windowManager不是WMS的直接代理类,创建WindowManagerGlobal,调用WindowManagerGlobal,创建ViewRootImpl,调用ViewRootImpl)
  2.   setContentView过程:Activity.setContentView调用PhoneWindow.setContentView(生成DecorView)//生成DecorView,同时将layoutId指定的布局layout到DecorView,设置为DecorView的child。
  3.      resume过程:ActivityThread:handleResumeActivity调用Activity.makeVisible调用WindowManagerGlobal.addView调用ViewRootImpl.setView
  4.         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绘制的整体流程

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值