美文网首页
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