Работа с параллельным потоком

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


Ответы (1 шт):

Автор решения: Arty Morris

Вариантов два.

  1. делайте проверку на null (возьмите это за привычку)

     if (_temp != null) { код }
    
  2. оберните на исключение

    try {
     код
    } catch (NullPointerException e) {
    }
    
→ Ссылка