Android - 安全地并发访问画布?

时间:2011-04-06 15:06:12

标签: android multithreading segmentation-fault android-canvas surfaceview

我正在进行网格+平铺活动,其中切片需要在网格中移动。网格(和图块)正在一个独立的线程中的一个表面上绘制到UI(UI处理触摸事件并将它们推送到队列以供网格处理)。

这一切都很好。我有一个工具栏,我可以从中拖动瓷砖。工具栏是一个已添加到相对布局的视图(并在UI线程上运行)。

无论我使用同步多少次或尝试保护画布不被同时写入,它仍然最终会导致本机SIGSEV11。

一些可能的解决方案:

  • 将所有内容放入一个主题中 - 由于触摸与绘制
  • ,可能会失败或变慢
  • 在一个线程中绘制访问画布的所有内容。

这需要进行大规模的改变,这可能需要几天时间。

我想知道是否有其他人遇到类似的问题,以及我是否可以无错误地同步对画布的访问。

非常感谢。

1 个答案:

答案 0 :(得分:0)

我只会有一个线程更新屏幕,但你可以让多个线程更新屏幕后面的数据,然后让它们设置一个标志,以便实际更新屏幕。