2010-03-29 16 views

risposta

10

Probabilmente la cosa più semplice da fare è questa:

while(needToDisplayData) 
{ 
    displayData(); // display the data 
    Thread.sleep(10000); // sleep for 10 seconds 
} 

In alternativa è possibile utilizzare un timer:

int delay = 1000; // delay for 1 sec. 
int period = 10000; // repeat every 10 sec. 
Timer timer = new Timer(); 
timer.scheduleAtFixedRate(new TimerTask() 
    { 
     public void run() 
     { 
      displayData(); // display the data 
     } 
    }, delay, period); 
+17

La prima soluzione congelerebbe il thread dell'interfaccia utente. –

+2

Lirik, la tua prima soluzione sarebbe gettare un ANR non è assolutamente consigliabile. E sarebbe stato più bello se avessi menzionato se timer.scheduleAtFixedRate creerebbe un nuovo thread per l'attività da eseguire o usasse lo stesso thread su cui è stato chiamato. – tony9099

+1

prima si blocca ui, la seconda lancia ex: 'java.lang.RuntimeException: impossibile creare il gestore all'interno del thread che non ha chiamato Looper.prepare()' – lxknvlk

58

C'è un altro modo, inoltre, che è possibile utilizzare per aggiornare l'interfaccia utente su specifica Intervallo di tempo. Le due opzioni sopra riportate sono corrette ma, a seconda della situazione, è possibile utilizzare metodi alternativi per aggiornare l'interfaccia utente su un intervallo di tempo specifico.

prima dichiarare una varialbe globale per Handler per modificare il controllo dell'interfaccia utente dal filo, come sotto

Handler mHandler = new Handler(); 

Ora creare un thread e utilizzare ciclo while per eseguire periodicamente l'attività utilizzando il metodo sonno del filo.

new Thread(new Runnable() { 
     @Override 
     public void run() { 
      // TODO Auto-generated method stub 
      while (true) { 
       try { 
        Thread.sleep(10000); 
        mHandler.post(new Runnable() { 

         @Override 
         public void run() { 
          // TODO Auto-generated method stub 
          // Write your code here to update the UI. 
         } 
        }); 
       } catch (Exception e) { 
        // TODO: handle exception 
       } 
      } 
     } 
    }).start(); 
+3

grazie vecchio è sempre oro –

+1

Impossibile fare riferimento a un non finale variabile mHandler all'interno di una classe interna definita in un altro metodo –

+0

Il modificatore di 'mHandler' deve essere cambiato in' final'. – Mandrake

7

Andrahu era sulla strada giusta con la definizione di un gestore. Se hai un gestore che chiama le tue funzioni di aggiornamento, puoi semplicemente inviare delay the message al gestore per 10 secondi.

In questo modo non è necessario avviare la propria discussione o qualcosa di simile che possa portare a strani errori, problemi di debug e di manutenzione.

Basta chiamare:

Handler myHandler = new MyUpdateHandler(GUI to refresh); <- You need to define a own handler that simply calls a update function on your gui. 
myHandler.sendMessageDelayed(message, 10000); 

Ora la funzione handleMessage saranno chiamati dopo 10 secondi. Si potrebbe semplicemente inviare un altro messaggio nella funzione di aggiornamento causando l'intero ciclo di eseguire più volte

+1

@schwiz Il collegamento è interrotto ... – Radu

3

C'è un modo semplice per visualizzare alcuni dati dopo ogni 10 secondi.

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_launcher); 
    ActionStartsHere(); 
} 

public void ActionStartsHere() { 
    againStartGPSAndSendFile(); 
} 

public void againStartGPSAndSendFile() { 
    new CountDownTimer(11000,10000) { 
     @Override 
     public void onTick(long millisUntilFinished) { 
      // Display Data by Every Ten Second 
     } 

     @Override 
     public void onFinish() { 
      ActionStartsHere(); 
     } 
    }.start(); 
} 
7

C'è anche un altro modo utilizzando Handler

final int intervalTime = 10000; // 10 sec 
Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
@Override 
public void run() { 
    //Display Data here 
    } 
}, intervalTime); 
0

Ogni 10 secondi aggiornato automaticamente lo schermo app o attività rinfrescato

creare all'interno onCreate metodo() ho provato questo codice funzionerà per me

Thread t = new Thread() { 
@Override 
public void run() { 
try { 
    while (!isInterrupted()) { 
    Thread.sleep(1000); 
    runOnUiThread(new Runnable() { 
     @Override 
     public void run() {    
     //CALL ANY METHOD OR ANY URL OR FUNCTION or any view 
     } 
    }); 
    } 
} catch (InterruptedException e) { 
} 
} 
};t.start(); 
+0

questo non è il modo corretto per controllare la mia ana qui il tuo thread ui è in attesa ed è per questo che potrebbe accadere che la tua app non risponda alla modalità –

+0

voglio automaticamente richiamare url e metodo o qualsiasi cosa come posso fare –

Problemi correlati