Как обновить значения во время работы метода - Java

Так что у меня действительно странная проблема, я просто не могу понять, почему она не работает. Я создаю стробоскоп как часть своего приложения и создал отдельный класс Strobelight. Когда я вызываю метод TurnOn или метод обновления, интервалы никогда не меняются. Думаю, было бы проще объяснить с помощью некоторого кода:

public class Strobelight{

private int delayOn, delayOff;

public void turnStrobeOn(){...}

public void update(int a_delayOn, int a_delayOff){
    delayOn = a_delayOn;
    delayOff = a_delayOff;
}

public void turnOn(int a_delayOn, int a_delayOff){
    delayOn = a_delayOn;
    delayOff = a_delayOff;
    this.turnStrobeOn();
}

В зависимости от того, включен ли стробоскоп или нет, один из этих методов вызывается для изменения включения стробоскопа с заданными интервалами или просто для изменения интервалов.

Вместо того, чтобы менять интервалы на что-то особенное, приложение просто использует минимально возможные интервалы при вызове Thread.sleep () для включения или выключения фонарика.

РЕДАКТИРОВАТЬ: это код потока и код, который включает фонарик

public void turnStrobeOn () {

    for ( int i = 0; i < 3; i++){

        isInCycle = true;

        cam = Camera.open();
        Parameters p = cam.getParameters();
        p.setFlashMode(Parameters.FLASH_MODE_TORCH);
        cam.setParameters(p);
        cam.startPreview(); // the flashlight is now on
        lightIsOn = true;
        new Thread(new Runnable() {
            public void run() {
                try {
                    Thread.sleep(delayOn);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).start();

        cam.stopPreview();
        cam.release();
        lightIsOn = false;
        new Thread(new Runnable() {
            public void run() {
                try {
                    Thread.sleep(delayOff);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).start();

    } //end of for loop

        isInCycle = false;  

} // end of turnStrobeOn

person Pythagoras    schedule 06.02.2014    source источник
comment
Я думаю, вам нужно будет опубликовать свой код потока, а не этот код классов.   -  person sgarman    schedule 06.02.2014
comment
Хорошо, готово. Я все еще озадачен этим, потому что я меняю его значения (я проверял, чтобы убедиться), поэтому я не понимаю, почему он не будет использовать новые значения   -  person Pythagoras    schedule 06.02.2014


Ответы (1)


Возможно, вы захотите получить чей-то совет по поводу этой покупки, я думаю, вы не можете быть настолько точными в отношении сна (). Также не забывайте использовать для этого миллисекунды. Я бы предложил использовать обработчик Android и сделать для этого postDelayed вместо сна.

Как приостановить / засыпать поток или процесс в Android?

person sgarman    schedule 06.02.2014
comment
отлично, обработчик Android изменил ситуацию и работал так, как должен, спасибо! - person Pythagoras; 06.02.2014