2011-07-06 3 views
0

私はViewを拡張し、onDraw(Canvas canvas)メソッドをオーバーライドするクラスを持っています。このビューはアニメーションを実行するので、onDrawは毎秒何度も呼び出されます。次の例を考えてみましょう...onDraw()メソッドの最終変数

@Override 
protected void onDraw(Canvas canvas) { 
    final int width = getWidth(); 
    final int height = getHeight(); 

    final int padLeft = getPaddingLeft(); 
    final int padTop = getPaddingTop(); 
    final int padRight = getPaddingRight(); 
    final int padBottom = getPaddingBottom(); 

    final RectF oval = new RectF(padLeft, padTop, width - padRight, height - padBottom); 
    ... 
} 

私は、この多くの関数が呼び出されるたびonDrawが起き呼び出すがあることを心配する必要がありますか。 finalは、毎回これらの関数を呼び出す必要はないことをコンパイラに伝えますか?これらの変数は、member variablesとして機能する方がよいでしょう。

P.S.自分のプログラムを実行しても、パフォーマンスには影響しないことがわかります。私は学習の観点からこの質問をしています。私が何をしているのか正確に知っていると気分が良くなります。

答えて

0

ここで最後に、この関数ではこのローカル変数は変更されず、関数はonDrawを呼び出すたびに呼び出されると言っています。 可能であれば、これらの変数をすべてDisplayPropertiesのような別のクラスに構成し、それを一度だけ初期化する方が良いでしょう。

+0

はい、私はかなり最終的なキーワードは、変数の最適化を行うことができることをコンパイラにも示唆しています。 – dfetter88

+0

最適化とはどういう意味ですか?いいえ、代用関数呼び出しを行うことはできません。はい、メインメモリからこの変数をリロードする必要はありません。詳細はこちらhttp://stackoverflow.com/questions/6602922/is-it-faster-to-access-final-local-variables-than-class-variables-in-java –

+0

お役立ち情報だから、関数呼び出しを避ける唯一の方法はメンバ変数を作ることです。 – dfetter88

関連する問題