1.官方介绍
Handle onto a raw buffer that is being managed by the screen compositor.
处理 由 屏幕合成器(creen compositor) 管理 的 原始缓冲区(raw buffer也可以理解为屏幕缓冲区?)。
android.view.Surface
public class Surface implements Parcelable {
private static native long nativeCreateFromSurfaceTexture(SurfaceTexture surfaceTexture)
throws OutOfResourcesException;
private static native long nativeCreateFromSurfaceControl(long surfaceControlNativeObject);
private static native long nativeGetFromSurfaceControl(long surfaceObject,
}
2. Surface的创建
Surface的具体使用上,我们通常并不直接去手动创建一个Surface,
尽管可以这么做,通常,我们是通过SurfaceView,GLSurfaceView间接地去创建Surface。
当然,更多的时候我们在使用Surface而不自知,在Andorid的窗口实现里,
每一个Window 其实都会对应一个 Surface,而每个Activity都会持有一个Window,
所以,我们通常在Activity里设置的view(通过setContentView),
从java抽象上看其最终的绘制目标就是在Surface上。
所以从顶层到底层: Activity - Window - Surface
3. 重要的类:
java层的Surface与cpp层的Surface并不相同,他们之间存在着关系,但并不是同一个抽象.
而cpp层里 Surface 与 ISurface 又是不同的抽象
3.1 SurfaceFlinger:
这个是 Surface 服务端的总管家,它具体是 ISurfaceComposer 接口的服务端实现。
android/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
在UI上看到的每一个window(如对话框、全屏的activity、状态栏)都有唯一一个自己的surface,
window将自己的内容(content)绘制到该 surface中。
Surface Flinger根据各个 surface 在 Z轴上的顺序(Z-order) 将它们渲染到最终的显示屏上。
(一层层绘制,可见的是最顶层)
参考文献:
https://blog.csdn.net/lu1024188315/article/details/74420866
https://blog.csdn.net/u010164190/article/details/119489616
网友评论