Autore Topic: CountDownTimer  (Letto 803 volte)

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
CountDownTimer
« il: 20 Aprile 2012, 00:15:28 CEST »
0
Ho un widget che visualizza un conto alla rovescia che viene visualizzato mediante la classe CountDownTimer utilizzando questo codice :

Codice (Java): [Seleziona]
public class TempoIndietro extends CountDownTimer{
                AppWidgetManager manager;
                ComponentName thisWidget;
                       
                        public TempoIndietro(long millisInFuture, long countDownInterval) {
                                super(millisInFuture, countDownInterval);
                                thisWidget = new ComponentName(context, widget.class);
                                manager = AppWidgetManager.getInstance(context);  
                                remoteView = new RemoteViews(context.getPackageName(),R.layout.widgett);
                        }

                        @Override
                        public void onFinish() {
                                remoteView.setTextViewText(R.id.textView2, context.getResources().getString(R.string.onair_widget_countdown));
                            manager.updateAppWidget(thisWidget, remoteView);
                        }

                        @Override
                        public void onTick(long millisUntilFinished) {
                                SimpleTimeFormat tf = new SimpleTimeFormat("$dd$ : $HH$: $mm$: $ss$");    
                            String risultato = tf.format(millisUntilFinished); // arg0 tempo
                            remoteView.setTextViewText(R.id.textView2, risultato);
                            manager.updateAppWidget(thisWidget, remoteView);
                        };
            }


Il problema è che ho notato che se il countdown va avanti per ore spesso si blocca perchè suppongo che android stoppi il thread per liberare risorse...è possibile questa mia supposizione ? come posso ovviare al problema considerando che questo countdown a volte dovrebbe durare anche 1 settimana ?

Grazie

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:CountDownTimer
« Risposta #1 il: 20 Aprile 2012, 08:52:21 CEST »
0
non puoi usare un alarm?
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:CountDownTimer
« Risposta #2 il: 20 Aprile 2012, 09:05:54 CEST »
0
E come Nicola? Non posso mica far partire un Alarm ogni secondo...il countdown visualizza giorni/ore/minuti/secondi...dovrei farlo partire ogni 10min e fare in modo che stoppi il vecchio CountDownTimer e lo faccia subito ripartire e sperare che così android lo lasci perdere e non lo killi ma resta sempre il problema che android lo può killare anche dopo2 minuti...

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:CountDownTimer
« Risposta #3 il: 20 Aprile 2012, 09:41:59 CEST »
0
Non posso mica far partire un Alarm ogni secondo...

E perchè non puoi? Chi te lo vieta?

Ma il punto è: dove devi usare questo countdown?

Dentro una activity? Una un Handler.
Fuori da una activity? Usa un Service con un Handler
Fuori da tutto? Usa l'alarmManager

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:CountDownTimer
« Risposta #4 il: 20 Aprile 2012, 09:51:58 CEST »
0
Praticamente ho un widget dotato di una textview che visualizza un countdown in formato giorni/ore/minuti/secondi, dal widget parte il Service che si connette online per prendere una data da un db, sempre il Service sottrae la data prelevata dal web con la data odierna e fa partire il CountDownTimer, nell'onTick del CountDownTimer ho inserito il codice che aggiorna la textview del widget cioè :
Codice (Java): [Seleziona]
remoteView.setTextViewText(R.id.textView2, risultato);
manager.updateAppWidget(thisWidget, remoteView);

ora non ho ben capito dove dite di usare l'alarm...

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:CountDownTimer
« Risposta #5 il: 20 Aprile 2012, 09:54:16 CEST »
0
L'alarm fa partire un service che aggiorna il widget... sta tutto nel link che ti ho postato nell'altro topic...

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:CountDownTimer
« Risposta #6 il: 20 Aprile 2012, 10:08:49 CEST »
0
Si Marco l'ho visto però nel mio caso l'alarm non mi sembra adatto perchè con l'alarm ogni secondo dovrei far partire il Service che preleva la data da web e NON fa + partire il CountDownTimer che aggiorna il widget ma è lo stesso Service che aggiorna ogni secondo il widget ma non oso immaginare la batteria degli utenti a fine giornata come sarà...non mi sembra pulita come soluzione che dici ? se usassi un broadcast con l'action ACTION_TIME_TICK ??

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:CountDownTimer
« Risposta #7 il: 20 Aprile 2012, 10:19:01 CEST »
0
Si Marco l'ho visto però nel mio caso l'alarm non mi sembra adatto perchè con l'alarm ogni secondo dovrei far partire il Service che preleva la data da web e NON fa + partire il CountDownTimer che aggiorna il widget ma è lo stesso Service che aggiorna ogni secondo il widget ma non oso immaginare la batteria degli utenti a fine giornata come sarà...non mi sembra pulita come soluzione che dici ? se usassi un broadcast con l'action ACTION_TIME_TICK ??

A prescindere dall'alarm manager, se il tuo processo è di prelevare ogni secondo la data da un server per 24 ore di continuo sono 86400 chiamate al giorno... in ogni caso, qualsiasi sia la tua soluzione per l'aggiornamento, spacchi la batteria dell'utente!

Offline mimmog

  • Utente senior
  • ****
  • Post: 731
  • Respect: +11
    • MisterX_Dev
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Note e Galaxy Nexus
  • Play Store ID:
    MisterX_Dev
  • Sistema operativo:
    Windows 7
Re:CountDownTimer
« Risposta #8 il: 20 Aprile 2012, 10:21:50 CEST »
0
Vero...allora dovrei cambiare la logica del service tipo farli prelevare il dato ogni ora (ad esempio) e quel dato lo posso far memorizzare nelle preference per farlo sfruttare al widget però resterebbe sempre il problema che se il widget utilizzasse il CountDownTimer android me lo potrebbe killare in ogni momento....