Autore Topic: CountDownTimer e problema recupero tempo  (Letto 1306 volte)

Offline Androi-dé!

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S4
  • Sistema operativo:
    Windows 7
CountDownTimer e problema recupero tempo
« il: 23 Maggio 2012, 23:45:45 CEST »
0
Dopo ore di scervellamenti mi rivogo a voi nella speranza di un suggerimento per ovviare al mio problema.
In pratica sto creando un count down con la classe CountDownTimer; funziona tutto a dovere, ho implementato il tasto pausa, il suono, ecc... però mi sono imbattuto in una problematica che mi sta attanagliando e dalla quale non riesco ad uscire ovvero se chiudo l'applicazione il timer giustamente continua a funzionare perchè è gestito tramite un thread se non sbaglio, tant'è che se metto un Toast nell'onTick() e chiudo l'applicazione il toast continua a venire visualizzato ogni secondo; il problema nasce quando riapro l'applicazione dove nonostante il count down continui in background a funzionare non riesco a reperirne il valore per poterlo far visualizzare trovandomi così con l'activity nello stato iniziale ma con un count down "nascosto" avviato, il mio intento invece sarebbe quello che, se c'è un count down attivo alla riapertura dell'app l'activity dovrà mostrare il conto alla rovescia alla situazione in cui si trova realmente il thread in quel momento.
Avete suggerimenti da darmi a riguardo? Thanks  :-o

Offline pivoide

  • Utente junior
  • **
  • Post: 133
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy tab 10.1
  • Play Store ID:
    codicerosso
  • Sistema operativo:
    Ubuntu 11.04
Re:CountDownTimer e problema recupero tempo
« Risposta #1 il: 23 Maggio 2012, 23:47:38 CEST »
0
Io ho una domanda: un Thread o un AsynkTask?
Odio l'inglese e per un informatico non è il massimo

Offline Androi-dé!

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S4
  • Sistema operativo:
    Windows 7
Re:CountDownTimer e problema recupero tempo
« Risposta #2 il: 24 Maggio 2012, 00:33:36 CEST »
0
Sinceramente ho scritto "un thread se non sbaglio" perchè non lo so nonostante abbia guardato le Reference per il CountDownTimer.

Offline pivoide

  • Utente junior
  • **
  • Post: 133
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy tab 10.1
  • Play Store ID:
    codicerosso
  • Sistema operativo:
    Ubuntu 11.04
Re:CountDownTimer e problema recupero tempo
« Risposta #3 il: 24 Maggio 2012, 01:00:28 CEST »
0
A naso non puoi riprenderlo perché quando riapri l'activity crei un nuovo timer che nulla ha a che vedere con il precedente. Per quanto ne so io hai due strade: implementare un service (che dovrebbe essere un'applicazione senza interfaccia utente che lavora in background, ma meglio che controlli) oppure utilizzare una classe singleton che mantenga i riferimenti al timer. (Qui c'è una cosa per il secondo caso: è illustrato per condividere dati fra activity ma dovrebbe funzionare anche per il tuo caso.
Odio l'inglese e per un informatico non è il massimo

Offline Androi-dé!

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S4
  • Sistema operativo:
    Windows 7
Re:CountDownTimer e problema recupero tempo
« Risposta #4 il: 24 Maggio 2012, 09:46:50 CEST »
0
A naso non puoi riprenderlo perché quando riapri l'activity crei un nuovo timer che nulla ha a che vedere con il precedente. Per quanto ne so io hai due strade: implementare un service (che dovrebbe essere un'applicazione senza interfaccia utente che lavora in background, ma meglio che controlli) oppure utilizzare una classe singleton che mantenga i riferimenti al timer. (Qui c'è una cosa per il secondo caso: è illustrato per condividere dati fra activity ma dovrebbe funzionare anche per il tuo caso.

Ma con il discorso del singleton la variabile che posso salvarmi è statica e diventerebbe un po' macchinoso riallacciarsi al timer con lo stato corrente; mentre se fosse possibile recuperare i riferimenti al timer avviato, che essendo attivo da qualche parte sarà di sicuro, anche se riapro l'app e quindi una nuova activity potrei intercettarlo nell'onresume() e a quel punto se esistente settare il tempo rimanente e avviare a video direttamente il count down riallineandosi con quello in corso.  :-\

Offline pivoide

  • Utente junior
  • **
  • Post: 133
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy tab 10.1
  • Play Store ID:
    codicerosso
  • Sistema operativo:
    Ubuntu 11.04
Re:CountDownTimer e problema recupero tempo
« Risposta #5 il: 24 Maggio 2012, 10:48:56 CEST »
+1
E' statico l'oggetto creato dal singleton ma all'interno dell'oggetto puoi avere variabili non statiche: sarebbe semplicissimo senza neanche la necessità di estendere Application. Per impostarlo:

Stato.instance().setTimer(ilTuoTimer);

Per riprenderlo:

TuoTimer ilTuoTimer=Stato.instance().getTimer();

La classe Stato è banale:
Codice (Java): [Seleziona]
public class Stato{
   private static Stato instance=null;
   private TuoTimer ilTuoTimer;
   
   private Stato(){}
   public static Stato instance() {
        if (instance == null) {
            instance = new Stato();
        }
        return instance;
   }
   public TuoTimer getTimer(){
        return ilTuoTimer;
   }
   public void setTimer(TuoTimer ilTuoTimer){
        this.ilTuoTimer=ilTuoTimer;
   }
}



Odio l'inglese e per un informatico non è il massimo

Offline Androi-dé!

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S4
  • Sistema operativo:
    Windows 7
Re:CountDownTimer e problema recupero tempo
« Risposta #6 il: 24 Maggio 2012, 13:12:28 CEST »
0
Ti ho dato un Thanks su questa tua risposta perchè in effetti parrebbe funzionare (ho messo nell'onDestroy il salvataggio dello stato e nell'onresume l'eventuale recupero) se non fosse però che trovo difficoltà a recuperare dal mio timer i millisecondi mancanti perchè non c'è un metodo specifico che lo faccia in quanto il .start() fa partire l'onTick(long millisUntilFinished) dove questi millisUntilFinished sono calcolati in base ai parametri dati al timer (ad esempio new CountDownTimer(30000, 1000)); sarebbe a mio avviso necessario mettere le mani nel metodo onTick vero e proprio per capire dove mette questo tempo rimanente e come prelevarlo perchè da quanto disponibile dalla documentazione di CountDownTimer mi sembra si possa fare ben poco.

Offline pivoide

  • Utente junior
  • **
  • Post: 133
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy tab 10.1
  • Play Store ID:
    codicerosso
  • Sistema operativo:
    Ubuntu 11.04
Re:CountDownTimer e problema recupero tempo
« Risposta #7 il: 24 Maggio 2012, 13:48:32 CEST »
0
Scusa ma nell'onTick non hai proprio quelli?
Odio l'inglese e per un informatico non è il massimo

Offline Androi-dé!

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S4
  • Sistema operativo:
    Windows 7
Re:CountDownTimer e problema recupero tempo
« Risposta #8 il: 24 Maggio 2012, 15:15:31 CEST »
0
Scusa ma nell'onTick non hai proprio quelli?

Sì, essendomi salvato praticamente il processo quel valore ce l'ho di sicuro anche perchè il conto alla rovescia continua a funzionare volente o nolente fino alla fine, il problema è che quei millisecondi sono passati all'onTick(long millisalloscadere) autonomamente una volta invocata la funzione .start() ed hanno vita all'interno dell'onTick(...), ed è recuperarli da lì che mi mette in difficoltà.