Работа с параллельным потоком
В программе класс SurfaceView выводит на экран игровую графику в параллельном потоке. В бесконечном цикле он перерисовывает графические объекты. В пользовательском потоке я обрабатываю нажатия на экран. При нажатии на кнопки НОВАЯ ИГРА программа инициализирует графические объекты (удаляет, обнуляет и т.д.) Класс SurfaceView перед тем как рисовать какой-то графический объект проверяет не равен ли он null? И всё работает нормально, но не всегда. Я предполагаю, что иногда удаление объекта при нажатии на кнопку НОВАЯ ИГРА попадает происходит именно между проверкой объекта на null и его рисованием. Т.е. SurfaceView проверяет объект на null(существует ли он), а пользовательский поток тут же удаляет этот объект. В следующий момент SurfaceView пытается вывести графический объект на экран и выдаёт ошибку, что объект не существует (=null). Я не уверен, что всё именно так происходит, но по другому объяснить редкие периодические ошибки не могу. Я поступил так: при нажатии НОВАЯ ИГРА я запрещаю SurfaceView выводить графические объекты на экран(устанавливаю boolean флаг = false), и только после того, как все объекты обновлены разрешаю обновление экрана (флаг = true). Подскажите, это правильный способ или эту задачу нужно решать по другому?
Ответы (1 шт):
Вариантов два.
делайте проверку на null (возьмите это за привычку)
if (_temp != null) { код }оберните на исключение
try { код } catch (NullPointerException e) { }