2010-03-29 12 views

Respuesta

10

Probablemente la cosa más sencilla de hacerlo es la siguiente:

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

Como alternativa se puede utilizar un temporizador:

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

Esa primera solución congelaría el hilo de UI. –

+2

Lirik, su primera solución arrojaría un ANR definitivamente no es aconsejable. Y hubiera sido mejor si hubiera mencionado si timer.scheduleAtFixedRate crearía un nuevo hilo para la tarea o usaría el mismo hilo al que se le llamó. – tony9099

+1

primero congela ui, segundo tira ex: 'java.lang.RuntimeException: No se puede crear manejador dentro de subproceso que no ha llamado Looper.prepare()' – lxknvlk

58

Hay un otro modo también que se puede utilizar para actualizar la interfaz de usuario en concreto intervalo de tiempo. Las dos opciones anteriores son correctas, pero dependiendo de la situación, puede usar formas alternativas de actualizar la UI en un intervalo de tiempo específico.

Primera declarar una varialbe global para Handler para actualizar la interfaz de usuario de control de Thread, como a continuación

Handler mHandler = new Handler(); 

Ahora crea un hilo y utilizar el bucle while para realizar periódicamente la tarea utilizando el método del sueño de la rosca.

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

gracias viejo siempre es oro –

+1

No se puede hacer referencia a un no final variable mHandler dentro de una clase interna definida en un método diferente –

+0

El modificador de 'mHandler' debe cambiarse a' final'. – Mandrake

7

Andrahu estaba en el camino correcto con la definición de un controlador. Si tiene un controlador que llama a sus funciones de actualización, simplemente puede enviar delay the message al controlador durante 10 segundos.

De esta forma no es necesario que inicie su propio hilo o algo así que ocasionará errores extraños, problemas de depuración y mantenimiento.

Sólo tiene que llamar:

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); 

Ahora su función handleMessage se llamará después de 10 segundos. Podría simplemente enviar otro mensaje en su función de actualización haciendo que todo el ciclo se ejecute una y otra vez

+1

@schwiz El enlace está roto ... – Radu

3

Hay una manera simple de mostrar algunos datos cada 10 segundos.

@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

También hay otra manera mediante Handler

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

Cada 10 segundos actualiza automáticamente la pantalla de su aplicación o actividad refrescado

crear dentro onCreate método() i probado este código funcionará para 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

esta no es la forma correcta de verificar mi ans aquí su hilo de la interfaz de usuario está en espera y es por eso que puede que su aplicación vaya al modo de no respuesta –

+0

quiero volver a llamar automáticamente url y método o cualquier cosa ¿cómo puedo hacer? –

Cuestiones relacionadas