Передача переменных между средством визуализации и другим классом с помощью queueEvent ()

Я хочу передать моему модулю визуализации некоторые значения из другого класса. После того, как средство визуализации вычислит значения, у меня есть мьютекс во вспомогательном классе, который должен сообщить мне, что средство визуализации завершило расчет, чтобы я мог продолжить с этими новыми значениями. Я могу передать значения рендереру без проблем, но не могу понять, как их вернуть. В настоящее время я использую некоторые статические переменные, но после их изменения средством рендеринга они, кажется, теряются. Они не видны в другом моем классе. Пример:

Класс

public class View extends SurfaceView{

  private void doSomething(){

     glSurfaceView.queueEvent(new Runnable() {

                @Override
                public void run() {
                  //..
                  renderer.calculate(stack);    
                }
    });
  }

private void doAnotherThing(){

    //Never happens:
    if(Helper.hasCalculated){
    /...
    }
}

}

В моем средстве визуализации :

public class MyRenderer implements GLSurfaceView.Renderer{

    private void calculate(Stack stack){         
      Helper.hasCalculated = true
    }
}

Мой вспомогательный класс:

public class Helper{

 public static volatile boolean hasCalculated = false;

}

hasCalculated определенно имеет значение true в модуле визуализации, но мой другой класс всегда видит это как false .Есть идеи, почему? Я предполагаю, что это потому, что он находится в другом потоке, но как я могу это решить? Если есть более чистый и безопасный подход, я был бы рад его услышать.

11
задан Lennart 7 December 2011 в 15:28
поделиться