23

Viewメソッドに渡される状態変数に応じて、特定のの可視性を設定するヘルパーメソッドがあります。これらのメソッドが何度も呼び出され、View可視性が変わらない場合があります。そのため、 「ビューの可視性を同じ可視性に変更して、理由もなく更新することには意味がない」Viewと考えて設定する前に、それぞれの可視性を確認し始めました。

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

setVisibilityただし、の実装ではすでにこれが考慮されているかどうか疑問に思っており、既存のものと同じ可視性を設定しているかどうかを確認し、 (私のコードが実行しようとしていること)をView不必要に更新しません。View

それで、私の「最適化」が実際にパフォーマンスを改善しているかどうか、またはAPIがすでに私の一歩先を行っているかどうかを誰かが知っていますか?

4

1 に答える 1

50

彼らはすでに一歩先を行っています。のコードを参照してください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;
    }
    ....
} 

フラグが現在の状態と一致するかどうかを確認します。その場合は、何もせずにそのまま戻ります。

于 2013-03-01T19:02:43.740 に答える