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