2014-12-29 4 views
0

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

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++; 
} 

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

Есть ли способ исправить это, все еще имея действие go() перед остановкой(), при котором stop() активируется после нажатияCount больше 3 и циклически проходит 3 раза?

Благодаря

ответ

0

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

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 нажатий ничего не происходит)

2

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

+0

так есть ли почему, чтобы «приостановить» приложение, не блокируя основной поток? – Nick

+0

Используйте будильник или таймер или любое количество других способов. – Simon

0

попробовать это

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++; 
} 
+0

проблема заключается в том, что stop() должен выполнить после трех кнопок buttonPress, с инструкцией if, программа просто пропустит stop() вместо ожидания, если buttonPress меньше 3 – Nick