2012-01-05 65 views
1

我正在開發一款Android帆布遊戲,並且正在繪製主遊戲窗體時注意到了lagspike。它開始在我開始在不同部分噴灑synchronized(surfaceHandler)以試圖對陣併發陣列修改。我是否同步?何時進行同步,何時不進行以及何時應該修改可見數據的經驗法則是什麼?同步Android帆布Surfaceview

也有可能是由其他東西引起的尖峯?繪圖方法在這種情況發生時執行,但不可能進行觸摸交互(大多數情況下,即使不是全部觸摸方法也是同步的)。

建議?

回答

1

我認爲只要您從一個區域的表面固定器生成畫布,就不必同步。這可能會或可能不會導致lagspike。如果您在多個線程中使用surfaceHandler,則可能需要將所有繪圖壓縮到一個線程中,否則您需要保持同步。

+0

我只在一個地方繪製一個線程,問題是即時修改正在繪製的其他地方的集合,導致併發的集合修改。這些應該同步嗎?十大小同步比一大同步更好/更差/相同嗎? – Dested 2012-01-05 06:07:52

+1

我認爲十個「小」同步的開銷比一個「大」同步最差,大小(我假設)對應於正在進行的更改次數。你也可以設計你的數據結構在訪問時更新,你不能使用迭代器:)。 – nmjohn 2012-01-05 06:09:17