Приостановить приложение Android до нажатия кнопки

У меня есть два метода: go() и stop(), и цикл for, перебирающий эти методы 3 раза. go() активируется автоматически при запуске цикла, а stop() активируется только после трехкратного нажатия кнопки:

private static int buttonPress;

for (int i = 0; i < 3, i++) {
    go();
    do {} while(pressCount < 4);
    stop();
}

Всякий раз, когда кнопка нажата, pressCount увеличивается на 1:

public void button(View v) {
    pressCount++;
}

Проблема в том, что при такой настройке при запуске цикла do while приложение зависает и вылетает.

Есть ли способ исправить это, если go() активируется до stop(), активируется stop() после того, как pressCount больше 3, и повторяется 3 раза?

Спасибо


person Community    schedule 29.12.2014    source источник


Ответы (3)


Вы не можете приостановить основной поток, приложение зависает.

private int loopCount = 0;
private int pressCount = 0;

public void button(View v) { /* Runs when button is clicked */
    if (loopCount < 4){
        pressCount++;

        if (pressCount == 3){
            pressCount = 0;
            loopCount++;
            stop();
        }
    }
}

Этот код запускается stop() при трехкратном нажатии кнопки, но запускается только три раза. (после 9 нажатий ничего не происходит)

person TuomasK    schedule 29.12.2014

вы не можете заблокировать основной поток более чем на 5 секунд, если это произойдет, то появится диалоговое окно anr (приложение не отвечает).

person Aqib    schedule 29.12.2014
comment
так есть ли смысл приостанавливать приложение, не блокируя основной поток? - person ; 29.12.2014
comment
Используйте будильник, таймер или любое другое количество способов. - person Simon; 29.12.2014

попробуй это

private boolean isStop = true;
private int buttonPressedCount = 0;

private void goOrStop() {
    if(isStop) {
      go();
      isStop = false;
    } else {
       stopIfCan(); // :)
    }
}

private void stopIfCan() {
    if(buttonPressedCount >= 3 ) {
        buttonPressedCount = 0; 
        isStop = false;
        stop();
    }
}

public void button(View v) {
    buttonPressedCount++;
}
person Vigen    schedule 29.12.2014
comment
проблема в том, что stop() ДОЛЖЕН выполняться после трех кнопокPress, с оператором if программа просто пропустит stop() вместо ожидания, если buttonPress меньше 3 - person ; 29.12.2014