getWindow().setBackgroundDrawable 和 getWindow().getDecorView().setBackgroundDrawable 之间的区别

Difference between getWindow().setBackgroundDrawable and getWindow().getDecorView().setBackgroundDrawable

它们有什么区别?据我所知,他们都做同样的事情。

如果您查看资源,您会发现 PhoneWindow.class 实现了 Window.setBackgroundDrawable 方法:

@Override
public final void setBackgroundDrawable(Drawable drawable) {
    if (drawable != mBackgroundDrawable || mBackgroundResource != 0) {
        mBackgroundResource = 0;
        mBackgroundDrawable = drawable;
        if (mDecor != null) {
            mDecor.setWindowBackground(drawable);
        }
        if (mBackgroundFallbackResource != 0) {
            mDecor.setBackgroundFallback(drawable != null ? 0 : mBackgroundFallbackResource);
        }
    }
}

如你所见,它调用了 DecorView 的不同方法 setWindowBackground:

public void setWindowBackground(Drawable drawable) {
    if (getBackground() != drawable) {
        setBackgroundDrawable(drawable);
        if (drawable != null) {
            drawable.getPadding(mBackgroundPadding);
        } else {
            mBackgroundPadding.setEmpty();
        }
        drawableChanged();
    }
}

这实际上是使用方法 DecorView.setBackgroundDrawable,但也为 Window 提供了额外的逻辑。所以我建议你使用 getWindow().setBackgroundDrawable().