美文网首页
Android Surface学习笔记

Android Surface学习笔记

作者: 行走中的3卡 | 来源:发表于2023-03-16 13:29 被阅读0次

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

相关文章

网友评论

      本文标题:Android Surface学习笔记

      本文链接:https://www.haomeiwen.com/subject/dnxdrdtx.html