2012-01-05 67 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