2013-03-01 10 views
13

私は、特定のViewの可視性をメソッドに渡される状態変数に応じて設定するヘルパーメソッドを持っています。場合によっては、これらのメソッドが何度も呼び出され、Viewの可視性は変更されません。だから私は考えて、を設定する前に各Viewの可視性をチェックし始めました。 "ビューの可視性を同じ可視性に変えて、何も理由なくリフレッシュさせないでください"setVisibilityの実装は、すでにこれを考慮して、チェックあなたはViewがすでに持っているものに同じ可視性を設定している場合、および不(Viewを更新していない場合Androidビュー:可視性を設定する前に視認性をチェックしてパフォーマンスを改善できますか?

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

はしかし、今、私は思ったんだけど私のコードがやろうとしていること)。

私の「最適化」が実際にどのようなパフォーマンスを改善しているか知っている人はいますか?

+0

はい、毎回 'setVisibility'をロードするようにVMに指示しないので、パフォーマンスを向上させています。 –

+0

@Geobits実際にあなたが言ったように、可視性を設定すると、可視性が同じであれば表示がリフレッシュされませんが、彼の場合にコードパフォーマンスを求めている場合、これは改善されます。 –

+0

ですが、 'setVisibilty'は別のメソッドを呼び出します:1-' setFlags'、2- 'mBackground.setVisible' –

答えて

36

すでに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; 
    } 
    .... 
} 

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

+0

ビンゴ、ちょうど私が知りたいと思ったもの。私は私の二重チェックを削除し、自分自身をいくつかの可読性を保存します。ありがとうございます! –

+0

あなたは私のup-voteを得ました –

+0

私は同じような旗を作成しようとしていました..あなたの答えを見るために幸運。 –

関連する問題