一、背景
之前一直好奇一件事当我们把View控件渲染之后Android系统底层是如何把view显示到屏幕上面的。当同时打开多个app时,我们可以看到多个app的内容。Android底层系统到底是如何把多个组件、多个窗口、多个app的界面同时渲染到屏幕上的呢?之前一直在看这方面的知识,发现网上很多都是介绍Android图形系统源码分析的,关于图形系统整个数据流程的理论分析过程很少。最近又搜刮了大量播客,也找到了好多优质的博文,自己也总结下Android图形系统数据流过程的分析。最后也介绍下在应用层多媒体开发中常用的SurfaceView、GLSurfaceView、TextureView、SurfaceTexture、EGLSurface的使用场景和区别。
二、Android图形系统数据流分析
先上图,通过图先大致了解下Android图形系统数据流程:
Android图形系统遵循着生产者消费者模型。生产者主要包括:View、OpenGL ES、MediaPlayer等。消费者主要是Surface。无论是View的绘制,还是OpenGL ES的绘制,或者播放器对视频数据的渲染,app进程最终数据流都会流向Surface。
Surface
Surface 是一个窗口。一个App中常见的Surface窗口是:状态栏、导航栏、Activity的根View DecorView、PopupWindow等。状态栏、导航栏、Activity的根View DecorView、PopupWindow最终的绘制都会把数据渲染到各自的Surface上。Surfac