美文网首页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