我是靠谱客的博主 玩命蚂蚁,这篇文章主要介绍Surface、SurfaceFlinger和Canvas的关系,现在分享给大家,希望可以做个参考。

简单描述下三者间的关系:

1、Surface和Canvas:

       Canvas为在画布的意思。Android的APP作图几乎都通过Canvas实例来完成,其实Canvas更多是各种画图接口的包装类,比如:drawPaints,drawPoints,drawRect,drawBitmap等接口函数,其调用流程如下所示:

而Surface简单的说,对应了一块屏幕缓冲区,每个window对应一个Surface,任何View都要画在Surface的Canvas上。传统的view共享一块屏幕缓冲区,所有的绘制必须在UI线程中进行。

2 、SurfaceFlinger和Surface:

SurfaceFlinger英文直译就是surface的投递者,surface就不用翻译了,翻译了反而不好理解。SurfaceFlinger是android的一个服务进程,其负责管理应用端的surface,将所有的surface复合。 首先要明确的是SurfaceFlinger只是负责合并 Surface的控制,比如说计算出两个Surface重叠的区域,至于Surface需要显示的内容,则通过skia,opengl和 pixflinger来计算他是介于图形库和应用之间的一层。每个应用在它自己的surface完成各种图形操作后,请求SurfaceFlinger显示到屏幕,surfaceflinger就会将所有的surface叠加起来,并且反映到framebuffer。

SuffaceFlinger和Surface和Canvas的应用实例就是RootViewImpl的drawSoftware中的mSurface.lockCanvas函数既建立了SurfaceFlinger连接。

public Canvas lockCanvas(Rect inOutDirty)

            throwsSurface.OutOfResourcesException, IllegalArgumentException {

        synchronized (mLock) {

           checkNotReleasedLocked();

            if (mLockedObject != 0) {

                throw new IllegalStateException("Surface wasalready locked");

            }

            mLockedObject = nativeLockCanvas(mNativeObject, mCanvas, inOutDirty);

            return mCanvas;

        }

    }


最后

以上就是玩命蚂蚁最近收集整理的关于Surface、SurfaceFlinger和Canvas的关系的全部内容,更多相关Surface、SurfaceFlinger和Canvas内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(85)

评论列表共有 0 条评论

立即
投稿
返回
顶部