2013-01-03 43 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啓動並引起非常明顯的故障,尤其是在較舊的設備上。