Подтвердить что ты не робот

Android Views: можно проверить видимость, прежде чем устанавливать видимость, повысить производительность?

У меня есть вспомогательные методы, которые устанавливают видимость определенных View в зависимости от переменных состояния, которые передаются в методы. Иногда эти методы будут вызваны много раз, а видимость View не изменится. Поэтому я начал проверять видимость каждого View, прежде чем устанавливать его мышлением: "Нет смысла менять видимость вида на ту же видимость и вызывать обновление без причины".

            if (myView.getVisibility() != View.VISIBLE) {
                myView.setVisibility(View.VISIBLE);
            }
            etc...

Однако теперь мне интересно, учитывает ли это реализация setVisibility и проверяет, настроена ли вы одинаковая видимость того, что уже имеет View, и не нуждается в обновлении View (что мой код пытается сделать).

Так кто-нибудь знает, действительно ли моя "оптимизация" улучшает любую производительность, или API уже на шаг впереди меня?

4b9b3361

Ответ 1

Они уже на шаг впереди. См. Код View.java:setVisibility():

public void setVisibility(int visibility) {
    setFlags(visibility, VISIBILITY_MASK);
    ...
}

Он вызывает setFlags():

void setFlags(int flags, int mask) {
    int old = mViewFlags;
    mViewFlags = (mViewFlags & ~mask) | (flags & mask);

    int changed = mViewFlags ^ old;
    if (changed == 0) {
        return;
    }
    ....
} 

Он проверяет, соответствует ли флаг текущему состоянию. Если это так, он просто возвращается, ничего не делая.