Android 页面显示体系简述(Canvas,Surface,ViewRootImpl,WMS)

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

注此文章的源码与理解基于 Android SDK 30

在Activity中显示画面

DecorView

它是显示体系的根View我们的xml文件写的布局与DecorView形成了一个ViewTree结构。在执行DecorView.onDraw()时就会一层一层往下绘制从而绘制形成完成的页面。

ViewRootImpl:

它是View与WMS通信的桥梁一个DecorView对应一个ViewRootImplDecorView在执行onDraw所需要的canvas(画布)就是它来提供的。

public final class ViewRootImpl implements ViewParent,
        View.AttachInfo.Callbacks, ThreadedRenderer.DrawCallbacks {
    // .....

    private boolean drawSoftware(Surface surface, AttachInfo attachInfo, int xoff, int yoff,
            boolean scalingRequired, Rect dirty, Rect surfaceInsets) {
        // ....
        final Canvas canvas;

        canvas = mSurface.lockCanvas(dirty);

        mView.draw(canvas); // mView 就是 DecorView
        // ....
    }

    private int relayoutWindow(WindowManager.LayoutParams params, int viewVisibility,
            boolean insetsPending) throws RemoteException {
        // ....

        // mWindowSession.relayout 通过ADIL与WMS通信
        int relayoutResult = mWindowSession.relayout(mWindow, mSeq, params,
                (int) (mView.getMeasuredWidth() * appScale + 0.5f),
                (int) (mView.getMeasuredHeight() * appScale + 0.5f), viewVisibility,
                insetsPending ? WindowManagerGlobal.RELAYOUT_INSETS_PENDING : 0, frameNumber,
                mTmpFrame, mPendingOverscanInsets, mPendingContentInsets, mPendingVisibleInsets,
                mPendingStableInsets, mPendingOutsets, mPendingBackDropFrame, mPendingDisplayCutout,
                mPendingMergedConfiguration, mSurfaceControl, mTempInsets);
        if (mSurfaceControl.isValid()) {
            mSurface.copyFrom(mSurfaceControl);
        } else {
            destroySurface();
        }

        // ....
    }

    // ....
}

WindowManagerService:

简称WMS从底层创建一个window对应的一个Surface给到ViewRootImpl。

SurfaceFlinger

SurfaceFinger是整个Android系统渲染的核心进程。所有应用的渲染逻辑最终都会来到SF中进行处理,最终会把处理后的图像数据交给CPU或者GPU进行绘制。

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: android