windowmanager随笔记忆

每次看完 过段时间就忘了。
入口。windowmanager,其实现类为windowmanagerImpl,windowmanagerimpl实际操作的是WindowManagerGlobal,windowmanagerglobal中addview,新建viewrootimpl。通过viewrootimpl绑定view与window(通过binder通讯windowmanagerservice,addtodisplay将view添加到window中去。)

https://juejin.cn/post/7119004719892135966#heading-7

入口:
windowmanger 添加view。addview。windowmanager调用顺序是 windowmanger--》windowmangerImp。为什么是windowmangerImpl呢。因为activity最终执行到Activity#attch中

 @UnsupportedAppUsage
    final void attach(Context context, ActivityThread aThread,
            Instrumentation instr, IBinder token, int ident,
            Application application, Intent intent, ActivityInfo info,
            CharSequence title, Activity parent, String id,
            NonConfigurationInstances lastNonConfigurationInstances,
            Configuration config, String referrer, IVoiceInteractor voiceInteractor,
            Window window, ActivityConfigCallback activityConfigCallback, IBinder assistToken) {
       //这里看到window 其实是phonewindow类型
        mWindow = new PhoneWindow(this, window, activityConfigCallback);
        mWindow.setWindowControllerCallback(this);
        mWindow.setCallback(this);
        mWindow.setOnWindowDismissedCallback(this);
        mWindow.getLayoutInflater().setPrivateFactory(this);
       //这里setwindowManager
        mWindow.setWindowManager(
                (WindowManager)context.getSystemService(Context.WINDOW_SERVICE),
                mToken, mComponent.flattenToString(),
                (info.flags & ActivityInfo.FLAG_HARDWARE_ACCELERATED) != 0);
        if (mParent != null) {
            mWindow.setContainer(mParent.getWindow());
        }
        mWindowManager = mWindow.getWindowManager();
        mCurrentConfig = config;

        mWindow.setColorMode(info.colorMode);

        setAutofillOptions(application.getAutofillOptions());
        setContentCaptureOptions(application.getContentCaptureOptions());
    }

接上###Window###类

 public void setWindowManager(WindowManager wm, IBinder appToken, String appName,
            boolean hardwareAccelerated) {
        mAppToken = appToken;
        mAppName = appName;
        mHardwareAccelerated = hardwareAccelerated;
        if (wm == null) {
            wm = (WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE);
        }
      //这里看到windowmanger就是windowmangerImpl。
        mWindowManager = ((WindowManagerImpl)wm).createLocalWindowManager(this);
    }

public WindowManagerImpl createLocalWindowManager(Window parentWindow) {
        return new WindowManagerImpl(mContext, parentWindow);
    }

所以说设置给windowmanager 就是windowmangerImpl,而windowmangerImpl中的parentwindow就是this即phoneWindow。

返回开头说AddView。最后到windowmangerImpl的addview。windowMagangerImpl


WMF流程.jpg

链接: https://pan.baidu.com/s/1KmcCsjgfGvNQ_OrS_2E4Qw?pwd=1234 提取码: 1234 大图

你可能感兴趣的:(windowmanager随笔记忆)