Autore Topic: Attesa ed esecuzione di operazioni periodiche  (Letto 885 volte)

Offline enos

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
Attesa ed esecuzione di operazioni periodiche
« il: 02 Ottobre 2010, 18:27:46 CEST »
0
Ciao a tutti,
sono alle prese con un problema semplice... ma che mi sta facendo impazzire!

Devo aggiornare periodicamente ogni x secondi la mia interfaccia. Per farlo ho creato una classe Timer che realizza l'attesa; al termine dell'attesa il metodo che aggiorna l'interfaccia si richiama ricorsivamente per un nuovo aggiornamento.

Il codice che ho scritto in una applicazione Java funziona benissimo, ma appena lo inserisco in una applicazione Android mi impalla l'applicazione: l'interfaccia non viene mai caricata!
Se invece elimino la chiamata ricorsiva l'interfaccia viene costruita correttamente.

Vi allego un po' di codice per darvi un'idea:

Codice (Java): [Seleziona]
public void UpdatePeriodico() {
               
                //operazioni

                aggiornaSchermata();
               
                Timer t=new Timer(30);
                t.activate();
                Client c=new Client(t);
                c.start();
                while (t.isActive()){
                        //attendi
                }
               
                UpdatePeriodico();
        }


Codice (Java): [Seleziona]
public class Timer extends Thread{
       
        private boolean attivo;
        private int seconds;
       
        public Timer(int sec){
                seconds=sec;
        }      
       
        public void run(){
                activate();
                countdown();
        }

        public synchronized void activate(){
                attivo=true;
        }

        public synchronized void countdown(){
                attivo=true;
                try {
                        wait(seconds*1000);
                } catch (InterruptedException e) {
                        e.printStackTrace();
                }
                attivo=false;
        }

        public synchronized boolean isActive(){
                return attivo;
        }

}

class Client extends Thread{

        private Timer timer;

        public Client(Timer t){
                timer=t;
        }

        public void run(){
                timer.countdown();
        }

}

Avete qualche suggerimento? Cosa sbaglio?
Grazie  :-)
« Ultima modifica: 02 Ottobre 2010, 18:32:14 CEST da enos »

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Attesa ed esecuzione di operazioni periodiche
« Risposta #1 il: 02 Ottobre 2010, 18:41:41 CEST »
+1
Avete qualche suggerimento? Cosa sbaglio?

Sbagli non usando gli strumenti standard di android.

Codice (Java): [Seleziona]
final Handler handler=new Handler();
final Runnable r = new Runnable()
{
    public void run()
    {
        //Tue operazioni
        handler.postDelayed(this, 30000);
    }
};

handler.postDelayed(r, 30000);