本文来自stackoverflow上的一个回答,很适合那些对这些概念感觉明白又说不明白它们之间的区别与联系的Android开发者。

Surface

一个Surface就是一个对象,该对象持有一群像素(pixels),这些像素是要被组合到一起显示到屏幕上的。你在u上看到的每一个window(如对话框、全屏的activity、状态栏)都有唯一一个自己的surface,window将自己的内容(content)绘制到该surface中。Surface Flinger根据各个surface在Z轴上的顺序(Z-order)将它们渲染到最终的显示屏上。

一个surface通常有两个缓冲区以实现双缓冲绘制:当应用正在一个缓冲区中绘制自己下一个UI状态时,Surface Flinger可以将另一个缓冲区中的数据合成显示到屏幕上,而不用等待应用绘制完成。

Window

一个window恰如你在计算机中看到的一个window。它拥有唯一一个用以绘制自己的内容的surface。应用通过 Window Manager创建一个window,Window Manager 为每一个window创建一个surface,并把该surface传递给应用以便应用在上面绘制。应用可以在surface上任意进行绘制。对于Window Manager来说,surface就是一个不透明的矩形而已。

View

一个view就是一个window中可交互的UI元素。每个window都有唯一一个附着于它的view hierarchy(这个还是不翻更好理解吧)。该view hierarchy提供了window所有的行为。当一个window需要重绘时(比如一个view 通过invalidate方法使自己失效了)就要进入到window的surface中去完成了。首先,该window的surface会被锁定,锁定的同时会返回一个canvas,该canvas可被用来在surface上绘制内容。该canvas会沿着view hierarchy遍历传递给每一个view,好让每个view绘制自己的UI部分。当这个过程完成时,surface将会被解锁和提交(posted),提交的目的是将刚刚绘制好的缓冲区交换到前台,然后让Surface Flinger利用该缓冲区的数据刷新window的显示。

SurfaceView

一个SurfaceView就是一个被特殊实现的View,它拥有自己专门的一个surface,以便让应用直接在里面绘制内容。该SurfaceView是独立于其所属window的view hierarchy的,view hierarchy中的view们共享window那一个surface。SurfaceView 的工作原理比你想的要简单——SurfaceView所做的全部就是要求Window Manager创建一个window,并告诉Window Manager所创建的window的Z轴顺序(Z-order),这个Z轴顺序可以帮助Window Manager决定将新建的window置于SurfaceView所属window的前面还是后面。然后,Window Manager会将新建的window放置到SurfaceView在所属window中的位置。如果新建window在SurfaceView所属window后面,SurfaceView会将它在所属window中占据的部分变透明,以便让后面的window显示出来。

Bitmap

一个Bitmap只是一些像素数据的接口。Bitmap中的像素数据所占内存空间既可以在直接创建Bitmap时分配,也可以创建Bitmap后将它指向一块像素数据空间,比如,当把一个canvas对象链接(hook up)到一个surface进行绘制时,就会创建一个Bitmap指向surface当前正在绘制的缓冲区。

好了,翻译完了。不知道你是否和我一样读完后,消解了许多长久萦绕心头的困惑。

android surface windows,Android易混概念辨析之Surface,Window,View,SurfaceView,Bitmap相关推荐

  1. Android之Surface/Window/View/SurfaceView区别

    Activity获得一块显存(Surface && FrameBuffer),然后在上面绘图(OpenGL && GPU),最后交给设备 去显示(Display设备). ...

  2. 高处看Surface,WIndow,View,SurfaceView

    开发安卓的人对于一些概念的理解不够深刻,导致写代码很费力.现在就一些问题进行澄清. Here are some definitions: A Surface is an object holding ...

  3. 免费易混实词辨析456组(1)

    莫红日 A 1    [哀怜•爱怜•爱恋]三者读音大致相同,但意义和用法不同."哀怜"指对别人的不幸遭遇表示同情,如"中华民族有哀怜弱者的传统"."爱 ...

  4. 阿里云的一些易混概念整理

    DBS,DTS,RDS,PTS区别: DBS:Database Backup Service,数据库备份服务,是为数据库提供连续数据保护.低成本的备份服务 DTS:Data Transmission ...

  5. 简练软考知识点整理-范围确认易混概念

    与确认范围容易混淆的知识点包括,确认范围与核实产品.质量控制.项目收尾,下面进行比较分析. (1)确认范围与核实产品 核实产品是针对产品是否完成,在项目(或阶段)结束时由发起人或客户来验证,强调产品是 ...

  6. 【C++】三大易混概念之覆盖

    覆盖体现在C++类中,我们平时叫做重写,比如重写某某某的虚函数. 虚函数:父类中加上了virtual关键字的成员方法(成员函数)叫做虚函数. 嗯,此文章针对入门级学习者,大牛请绕道. 一.覆盖 覆盖的 ...

  7. 无孔不入的Android侵入Windows系统

     桌面时代的Windows与移动时代的Android,各自统治一个时代,但彼此都井水不犯河水,谁也无法侵入的边界,微软在PC时代用Windows捆绑了一大批OEM厂商与软件开发者,成就了独一无二的 ...

  8. android获取当前windows,Android 中的 Window

    一台 Android 手机屏幕上显示的内容就是由一个个 Window 组合而成的.顶部的状态栏是一个 Window,底部的导航栏也是一个 Window,中间自己的应用显示区域也是一块大 Window, ...

  9. 智能投影机android系统,Android对比Windows 谁带投影入智能化

    投影智能 现况分析 [中关村在线投影机频道原创]每当我们提起智能化,首先出现在脑海中的一定是电脑和手机.从传统观念看,智能似乎与投影不沾边,然而现实告诉我们,投影智能化意识大势所趋. 投影进入智能化 ...

最新文章

  1. vs代码显示波浪线,但没编译错误
  2. 编写一个判断素数的函数,在主函数输入一个整数时,输出是否素数的信息。...
  3. MFC笔记2(控件位置调整)
  4. 我大学期间看的好书推荐
  5. 数据结构小总结(成都磨子桥技工学校数据结构前12题)
  6. python导包路径问题_python的导包问题
  7. 计算机类说课比赛视频,全国“xx杯”计算机类说课大赛课件一等奖作品:制作逐帧动画说课课件...
  8. IronPython 与C#交互
  9. 吃完饭打嗝原因及治疗方法(分享)
  10. 什么是康奈尔笔记法?
  11. css媒体查询iphone4和iphone5
  12. Mac如何拷贝文件到移动硬盘
  13. 通过香港招行一卡通收回PayPal资金
  14. 2g内存用linux的哪个版本,Linux 下安装sql server 时 2G内存限制的最新(2019-08-15) 解决方案...
  15. RxJava学习资源
  16. 终于搞懂Dijkstra算法了
  17. 数字逻辑练习题(一)
  18. run和start区别
  19. 串的一些基础操作(c语言)~DS笔记⑤
  20. HTML5之HTML+CSS3代码(一)

热门文章

  1. 今天心情好,一起探讨下《送给大家的200兆SVN代码服务器》怎么管理我们的VS代码?...
  2. RocketMQ 部署不当导致磁盘空间不释放
  3. 在CentOS 8上安装与配置Apache虚拟主机
  4. SpringBoot, 启动类,使用「SpringBootApplication」标注
  5. iBatis下使用like查询,以及需要注意的问题
  6. c语言 malloc前的括号,20. 有效的括号(LeetCode)——C语言及JS实现
  7. App 签名过期或泄露怎么办?别担心,Google 已经给出解决方案!
  8. Aspose.Words转换为PDF的时候字体丢失的问题解决
  9. 仿百度文库解决方案(一)——总体思路
  10. iOS开发过程中常见错误问题及解决方案