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;

        }

    }


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值