Dovrebbe essere utilizzato CountDownLatch per attendere un evento?

1

Ho una situazione qui, dove ho un ciclo che scorre x quantità di volte. Il valore x è determinato dall'utente. Ogni volta che si interrompe, voglio che attenda un clic del pulsante prima di continuare il ciclo. vale a dire. qualcosa come questo (pseudocodice):

loop(x times){
Button b;
  wait until a click
  when clicked{
    b.onclicklistener{
      setText(x);
    }
  }
}

Lo sto usando per un'app per Android, quindi con Thread.wait () / Thread.notify () ho appreso che interrompe l'UIthread principale, quindi non posso usarlo.

Quindi, credo che le uniche due opzioni che posso usare per "mettere in pausa" il ciclo siano CountDownLatch.await () o AsyncTask (non so cosa faccia, non ho fatto ricerche su di esso)

CountDownLatch.await () / CountDownLatch.countDown () sarebbe il miglior metodo e classe da usare in questo esempio, o dovrei cercare in AsyncTask?

    
posta user154989 13.08.2014 - 20:56
fonte

2 risposte

1

Invece di pensarci come il pulsante "non in pausa" di un ciclo, preferirei pensare a qualcosa come in esecuzione ogni volta che fai clic sul pulsante, ad esempio:

b.onclicklistener {
   return (or remove listener) if loops > x
   loops++
   setText(x)
   restOfLoop()
}

Detto questo, se si richiede assolutamente che il ciclo venga eseguito in un thread separato, nella tua situazione sarebbe sufficiente un Semaphore regolare. Chiama solo acquire() nel ciclo in cui desideri mettere in pausa e release() nel listener dei clic.

    
risposta data 13.08.2014 - 22:11
fonte
0

Non userò CountDownLatch nello scenario perché non è riutilizzabile. Guarda Semaphore o Cyclic Barrier per funzionalità simili.

    
risposta data 12.12.2014 - 08:07
fonte

Leggi altre domande sui tag