Android Views: можно проверить видимость, прежде чем устанавливать видимость, повысить производительность?
У меня есть вспомогательные методы, которые устанавливают видимость определенных View
в зависимости от переменных состояния, которые передаются в методы. Иногда эти методы будут вызваны много раз, а видимость View
не изменится. Поэтому я начал проверять видимость каждого View
, прежде чем устанавливать его мышлением: "Нет смысла менять видимость вида на ту же видимость и вызывать обновление без причины".
if (myView.getVisibility() != View.VISIBLE) {
myView.setVisibility(View.VISIBLE);
}
etc...
Однако теперь мне интересно, учитывает ли это реализация setVisibility
и проверяет, настроена ли вы одинаковая видимость того, что уже имеет View
, и не нуждается в обновлении View
(что мой код пытается сделать).
Так кто-нибудь знает, действительно ли моя "оптимизация" улучшает любую производительность, или API уже на шаг впереди меня?
Ответы
Ответ 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;
}
....
}
Он проверяет, соответствует ли флаг текущему состоянию. Если это так, он просто возвращается, ничего не делая.