Android - одновременный доступ к холсту безопасно? - PullRequest
0 голосов
/ 06 апреля 2011

Я занимаюсь сеткой + плиткой, где плитки должны перемещаться по сетке. Сетка (и плитки) рисуются в SurfaceView в отдельном потоке к пользовательскому интерфейсу (пользовательский интерфейс обрабатывает события касания и помещает их в очередь для обработки сетки).

Это все хорошо. У меня есть панель инструментов, с которой я могу перетаскивать плитки. Панель инструментов - это представление, которое было добавлено в относительный макет (и работает в потоке пользовательского интерфейса).

Независимо от того, сколько раз я использую синхронизацию или пытаюсь защитить холст от записи в одно и то же время, он все равно в конечном итоге вызывает собственный SIGSEV11.

Несколько потенциальных решений:

  • Поместите все в один поток - скорее всего, потерпит неудачу или будет очень медленным из-за касания или рисования
  • Нарисуйте все, что имеет доступ к холсту в одной теме.

Это потребует значительных изменений, которые, вероятно, займут несколько дней.

Мне интересно, если у кого-то еще были подобные проблемы и могу ли я синхронизировать доступ к холсту без ошибок.

Большое спасибо.

1 Ответ

0 голосов
/ 06 апреля 2011

Я бы хотел, чтобы только один поток обновлял экран, но вы можете сделать так, чтобы несколько потоков обновляли данные за экраном, а затем устанавливали флаг, чтобы вызвать фактическое обновление экрана.

...