Ordine dei thread eseguiti

Visivamente, mi aspetto che la mia app mostri quattro toast nel seguente ordine:

  1. createToast (“avvio del metodo RandomCue ritardato”);
  2. createToast (“inizio del ritardo”);
  3. createToast (“fine del ritardo”);
  4. createToast (“fine del metodo RandomCue ritardato”);

Tuttavia, l’ordine risultante è:

  1. createToast (“avvio del metodo RandomCue ritardato”);
  2. createToast (“fine del metodo RandomCue ritardato”);
  3. createToast (“fine del ritardo”);
  4. createToast (“inizio del ritardo”);

Il mio objective generale è di avere un programma che mostri un’immagine e cambi ogni 3 secondi. Il giocatore può premere un pulsante e l’immagine cambia per 1,5 secondi. Pertanto, ci sono due metodi, uno per cambiare immagine usando il countdowntimer e un altro per cambiare immagine usando il metodo onClick corrispondente a imagebutton.

Il problema che sto incontrando è il codice fornito nel collegamento (metodo chiamato all’interno di un metodo onclick) dovrebbe cambiare l’immagine, impostare un valore bool su false, attendere 1,5 secondi e poi cambiare lo stesso valore bool in vero.

Mentre il valore bool è vero, il metodo che cambia le immagini dovrebbe essere saltato, ma non è questo il caso e non so perché, ma penso che sia qualcosa a che fare con il codice negli elenchi che ho creato qui sotto.

Quindi il problema che ho è quando si fa clic sul pulsante, l’immagine cambia come previsto, ma a volte cambia di nuovo troppo velocemente a causa del primo metodo che non riconosce che il giocatore ha risposto e quindi non dovrebbe cambiare ancora l’immagine.

public void delayedRandomCue(final long a){ didPlayerRespond = true; createToast("start of delayed RandomCue Method"); randomCue(); Thread delay = new Thread() { public void run() { try { createToast("start of delay"); Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); }finally { createToast("end of delay"); didPlayerRespond = false; } } };delay.start(); createToast("end of delayed RandomCue Method"); } 

https://gist.github.com/cjayem13/d32446ceb8c6d9626c68#file-easyfragment-Java https://gist.github.com/cjayem13/d32446ceb8c6d9626c68

https://gist.github.com/cjayem13/d0a0b124dfe17666be25#file-easyfragment-Java https://gist.github.com/cjayem13/d0a0b124dfe17666be25

  onclick(){ delayedRandomCue(final long a) } randomCue(); Thread cueThread = new Thread(){ public void run() { try { while (fComm.fragmentGetTimerBool()) { if(!didPlayerRespond) { if (decTime > 1000) { Thread.sleep(decTime); } else { Thread.sleep(1000); } decTime -= 50; randomCue(); } } } catch (InterruptedException e) { e.printStackTrace(); } finally { saveScore(); } // turn into end of all pics triggers bonus sTimerOn = false; fComm.fragmentScoreResponse(100); //createToast("Bonus for completing all possible answers"); } }; cueThread.start(); 

 public void delayedRandomCue(final long a){ didPlayerRespond = true; 

questo succede prima

  createToast("start of delayed RandomCue Method"); randomCue(); Thread delay = new Thread() { public void run() { 

Questo accade in background, in modo asincrono.

  try { createToast("start of delay"); Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); }finally { 

Questo accade in background, dopo l’esecuzione e il completamento in modo asincrono

  createToast("end of delay"); didPlayerRespond = false; } } };delay.start(); 

Questo viene secondo perché viene eseguito in modo sincrono con il resto del metodo.

  createToast("end of delayed RandomCue Method"); } 

Questo non ti risponde sull’ordine dei toast, ma sei sicuro, quando dici

Il problema che sto incontrando è il codice fornito nel collegamento (metodo chiamato all’interno di un metodo onclick) dovrebbe cambiare l’immagine, impostare un valore bool su false, attendere 1,5 secondi e poi cambiare lo stesso valore bool in vero.

Mentre il valore bool è vero, il metodo che cambia le immagini dovrebbe essere saltato, ma non è questo il caso e non so perché, ma penso che sia qualcosa a che fare con il codice negli elenchi che ho creato qui sotto.

che questo è il caso?

Sembra più che se il valore booleano è impostato su false, l’altro metodo che modifica le immagini deve essere saltato, e finché è vero, ha bisogno di cambiare periodicamente le immagini.

Prova a farlo e forse l’immagine non cambierà molto rapidamente dopo che l’utente ha triggersto onClick.