Android 屏幕画面生成的整体大致流程和一些相关概念:Window & Surface

#.  屏幕画面生成的 整体 大致流程
下面我们从Window开始说起,逐步讲到屏幕画面输出的大致流程:
    
    我们平时使用的Activity/Dialog/Toast中都包含一个Window对象,从概念上讲,这个Window是所有View的载体,它由PhoneWindow来实现,内部包含一个DecorView,而DecorView是View树的最顶层节点。
    但在app使用过程中,一个View我们能找到具体与什么相对应,而Window找不到,因为Window只是Android框架中的一个抽象概念,它为了便于理解和实现相关功能管理而出现,它对应的只是一个封装类,封装了相应的数据结构和方法。    
    一个Window对应着一个DecorView和一个ViewRootImpl,它是通过ViewRootImpl来对内部的View来进行各种功能管理的。
    每个Window都有一个显示层级z-ordered,层级大的Window画面会覆盖在层级小的Window上面。(可以想象Android屏幕有个z轴,方向垂直屏幕向外,每个Window的位置坐标不仅有x、y轴对应值决定其在平面上的偏移,还有z值决定画面位置的高、低)
    Window创建后,系统会为其分配一个Surface(其实是ViewRootImpl持有的),用于承载上面的画面。Surface中包含一个Canvas对象,用于具体绘制画面。每一轮的绘制过程,这个Canvas对象会按照View树的结构依次传递给相应View,每个View根据情况在自己的draw()/onDraw()方法中绘制自己对应区域的画面。最终这些画面构成了整个Window对应的Surface画面。
    而通过共享内存,系统底层服务SurfaceFlinger可以获取这些Surface的输出缓冲区数据。简单地将,SurfaceFlinger会把屏幕上
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值