我有辅助方法,根据传递给方法的状态变量设置某些View
的可见性。有时,这些方法会被多次调用,View
的可见性不会改变。所以我发现自己开始检查每个View
的可见性,然后用思考来设置它,"没有必要将View的可见性更改为相同的可见性并导致刷新没理由" 。
if (myView.getVisibility() != View.VISIBLE) {
myView.setVisibility(View.VISIBLE);
}
etc...
但是,现在我想知道setVisibility
的实施是否已经考虑到这一点,并检查您是否设置了与View
已有的相同的可见性,并且没有&# 39;不必要地刷新View
(我的代码试图做的)。
所以有人知道我的"优化"实际上是在提高性能,还是API已经领先于我?
答案 0 :(得分:47)
他们已经领先一步了。请参阅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;
}
....
}
检查标志是否与当前状态匹配。如果是这样,它只是在没有做任何事情的情况下返回。