2013-01-03 31 views
0

在我的Android应用程序中,我绘制了很多矩形,行&圆弧 ,这些在用户操作中经常发生变化。如何优化我的代码在画布上绘图

现在我所做的是在onDraw()方法 中创建我的Paint对象,以使它们保持局部变量并且不会导致任何内存问题。

但在代码审查期间,这被指出是一个错误。 我被告知这可能会减慢画布上的绘图,因为每次调用onDraw()时都会调用new()。所以我被要求将Paint对象作为类变量,只初始化它们一次,并且只改变它们在onDraw()中的属性,并在屏幕关闭/销毁时进一步取消它们。

我想问一下,这是正确的做法还是事情已经变好了,因为我没有在屏幕上发现UI太慢,我怀疑这可能是不必要的改变。

请提供建议。

回答

0

我发现在onDraw()处理期间Paint paint = new Paint();存在延迟。我现在使paint成为一个类变量,并且在onDraw()中简单地修改已经构建的Paint变量的属性。

public void onDraw(Canvas canvas) { 
     mPaint.setColor(Color.BLUE); 
     ... 
     mPaint.setStyle(Style.FILL); 
     ... 
    } 
+0

有什么样的滞后? – Ankit

+1

好吧,无论何时你做一个'new',都有一段时间来构造这个变量。如果该变量是一个成员变量,并且已经构造过一次(比如在'onCreate()')中,那么这段时间已经用完了。简单地改变'mPaint'的属性就不会有太多的CPU周期了(我没有硬性的数字,但我认为这是半明显的......我希望!) –

1

是的,你应该使用Paint作为类成员。 Paint的大小可能很小,并不是我检查过大脑,但它只是一个设置容器。

在Draw中分配任何对象是一个坏主意,因为它可能导致GC启动并引起非常明显的故障,尤其是在较旧的设备上。