2011-07-06 89 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

通過說final在這裏你只是說這個局部變量不會在這個函數中被改變,並且每次調用onDraw函數都會被調用。 如果可能,最好將所有這些變量組合到DisplayProperties等其他類中,並只初始化一次。

+0

是的,但我相當肯定final關鍵字還暗示編譯器可以對變量進行優化。 – dfetter88

+0

你說什麼意思優化。不,它不能代替函數調用。是的,不需要從主存儲器重新加載這些變量。更多這裏http://stackoverflow.com/questions/6602922/is-it-faster-to-access-final-local-variables-than-class-variables-in-java –

+0

很高興知道。所以避免函數調用的唯一方法是通過創建成員變量? – dfetter88