Отмените паузу / ожидание на обработчике с отложенной задержкой / работоспособном и все еще активируйте приостановленный код - PullRequest
1 голос
/ 12 июня 2011

Настройка: у меня есть 4 этапа, в которых я использую обработчик с отложенной задержкой, чтобы сделать паузу еще с двумя вложенными задержками.

Хронология:

stage1 | CODE FIRES |stage2 | КОДОВЫЕ ПОЖАРЫ |stage3 | КОДОВЫЕ ПОЖАРЫ |stage4

stage1: деактивирован, просто показывает настраиваемое оповещение.

stage2: деактивирован (в основном) с визуальными элементами для пользователя, включая обратный отсчет

stage3: деактивирован со вторым отсчетом времени

stage4: взаимодействие с пользователем, нет обратного отсчета или дополнительных пауз

Я хочу, чтобы пользователь мог переходить к концу stage2 при нажатии кнопки, что отменяет таймер обратного отсчета и задержку после задержки(без отмены кода, который он ожидает инициации)

Я пытался отменить оба и каждый по отдельности, но не удалось, вот команды, которые я использовал.

    countdowntimer.cancel();  // this didn't work from the button or a void call
    handler.removeCallbacks(runnable); // want to skip to end of stage2

Я видел несколько ссылок на try / catch, или, возможно, использовал поток в поисках, но не знал, как его использовать, или если это уместно.

Спасибо за любой ввод.

** Редактировать для ссылки на нерабочий код: * Я вырезал большую часть несвязанных вещей, не уверен, убил ли я их} или;экстра

    public class Main extends Activity {

public Boolean onOffCDT = true;
public Handler handler2Mem;
public Runnable mem2Runnable = null;
public CountDownTimer aCounter;
@Override 
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    aCounter = null;        
    final Handler handlerMem = new Handler(); 
    final Runnable memRunnable = new Runnable() {

        public void run() { 
        //code
              final CountDownTimer aCounter = new CountDownTimer(memTime, 100) {

                 public void onTick(long millisUntilFinished) {
                     //update time
                     if(onOffCDT.equals(false)) {
                         onOffCDT = true;
    //                   aCounter.cancel();
                     }   
                 }

                 public void onFinish() {
                     title.setText(tempTitle);
                 }
        };
             aCounter.start();            


    Handler handler2Mem = new Handler(); 
    Runnable mem2Runnable = new Runnable() {
        public void run() {
             //code
             CountDownTimer bCounter = new CountDownTimer(8000, 100) {

                 public void onTick(long millisUntilFinished) {
             //update time
                 }

                 public void onFinish() {
                     title.setText(tempTitle);
                 }
              };
             bCounter.start(); 
             stage3(8000);   //another delay            
        };
    };  handler2Mem.postDelayed(mem2Runnable, memTime);


    }    

}; handlerMem.postDelayed(memRunnable, 2500);

    submit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            //  this button checks stage#, if stage4 info - else...       
          }else{
          aCounter.cancel();
              onOffCDT = false;
              cancelCountDown(mem2Runnable, handler2Mem);
          }
        }

    });

    }

private void stage3 (Integer tTime) {
    Handler handler = new Handler(); 
            handler.postDelayed(new Runnable() { 
            public void run() { 
              //Do Stuff 

         } 
    }, tTime); 
}

public void cancelCountDown(Runnable run2, Handler hand2) {

      hand2.removeCallbacks(run2);

}

1 Ответ

0 голосов
/ 12 июня 2011

просто добавьте if ((boolean)canceled)return в ваш метод и установите его в true, если вы хотите отменить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...