美文网首页Android
Android - Activity的onAttachToWin

Android - Activity的onAttachToWin

作者: xlq | 来源:发表于2020-12-01 16:26 被阅读0次

    是在onResume之后,开始绘制View的方法performTraversals()中调起的。

    // View.java
    private void performTraversals() {
        // 省略其他代码
        host.dispatchAttachedToWindow(mAttachInfo, 0);
        // 省略其他代码
        performMeasure(childWidthMeasureSpec, childHeightMeasureSpec);
        // 省略其他代码
        performLayout(lp, mWidth, mHeight);
        // 省略其他代码
        performDraw();
    }
    
    1. host 赋值是 mView,mView是在ViewRootImpl的setView()方法中赋值,而setView是在给将DecorView添加到Window时调用,所以可知:mView就是DecorView。
    // WindowManagerGlobal.java
    public void addView(View view, ViewGroup.LayoutParams params,
                Display display, Window parentWindow) {
        // 无关省略
        root = new ViewRootImpl(view.getContext(), display);
        // 无关省略
        root.setView(view, wparams, panelParentView); // view就是DecorView
        // 无关省略
    }
    
    1. DecorView中没有重写dispatchAttachedToWindow()方法,找父类最终找到View.java
    // View.java
    
    void dispatchAttachedToWindow(AttachInfo info, int visibility) {
        // 无关省略
        onAttachedToWindow();
    }
    
    1. DecorView中重写了onAttachedToWindow()
    // DecorView.java
    
    @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        final Window.Callback cb = mWindow.getCallback();
        if (cb != null && !mWindow.isDestroyed() && mFeatureId < 0) {
            cb.onAttachedToWindow();
        }
    }
    
    1. 拿到Window的接口Callback,并调用onAttachedToWindow,具体的实现就在Activity中。

    所以Activity的onAttachedToWindow方法执行在onResume之后,View开始绘制之前。

    相关文章

      网友评论

        本文标题:Android - Activity的onAttachToWin

        本文链接:https://www.haomeiwen.com/subject/vvuswktx.html