2012-01-07 9 views

Respuesta

21

Es posible que desee echa un vistazo a TimerTask

Desde sacaste a este nuevo me gustaría hacer una recomendación diferente, que es una Handler. Es más fácil de usar que un TimerTask, ya que no será necesario que invoque explícitamente runOnUiThread ya que Handler se asociará con el subproceso UI siempre que se cree en el subproceso UI o lo cree utilizando el looper principal en su constructor. Sería funciona de esta manera:

private Handler mHandler; 
Runnable myTask = new Runnable() { 
    @Override 
    public void run() { 
    //do work 
    mHandler.postDelayed(this, 1000); 
    } 
} 

@Override 
public void onCreate(Bundle savedState) { 
    super.onCreate(savedState); 
    mHandler = new Handler(Looper.getMainLooper()); 
} 
//just as an example, we'll start the task when the activity is started 
@Override 
public void onStart() { 
    super.onStart(); 
    mHandler.postDelayed(myTask, 1000); 
} 

//at some point in your program you will probably want the handler to stop (in onStop is a good place) 
@Override 
public void onStop() { 
    super.onStop(); 
    mHandler.removeCallbacks(myTask); 
} 

hay algunas cosas a tener en cuenta con los controladores en su actividad:

  1. Su actividad puede ser apagado/no visible, mientras que su manejador sigue funcionando si no no lo detenga en OnStop (o onPause si lo inició en onResume), esto generará problemas si intenta actualizar la interfaz de usuario
  2. Si su teléfono entra en modo de suspensión profunda, los manipuladores no dispararán tan a menudo como usted lo haya hecho especificado. Sé que esto que he hecho algunas pruebas exhaustivas con dispositivos Bluetooth para conectividad de prueba después de muchas horas de funcionamiento y que había utilizado junto con los manipuladores imprime el registro cada vez que se dispararon.
  3. Si necesita que este temporizador sea continuo le recomiendo que lo ponga en un servicio que durará más que una actividad. Registre su actividad con el servicio (implementando una interfaz definida en el servicio para comunicarse con el servicio).
+0

El enlace no funciona. – laarsk

+1

Se corrigió por usted. –

+0

¡Gracias por eso! :) – laarsk

11

Este es el código que utilicé en mi proyecto actual. Usé TimerTask como Matt dijo. 60000 es el milisec. = 60 seg. Lo usé para actualizar los puntajes de los partidos.

private void refreshTimer() { 
     autoUpdate = new Timer(); 
     autoUpdate.schedule(new TimerTask() { 
      @Override 
      public void run() { 
       runOnUiThread(new Runnable() { 
        public void run() { 
         adapter = Score.getScoreListAdapter(getApplicationContext()); 
         adapter.forceReload(); 
         setListAdapter(adapter); 
        } 
       }); 
      } 
     }, 0, 60000); 
+0

No funciona. ¿QUÉ significa autoUpdate? y runOnUiThread. Menos – l0gg3r

+3

Esas preguntas apenas son relevantes, l0gg3r. Dio un ejemplo de una tarea programada para ejecutarse después de 60 segundos, en el hilo de la interfaz de usuario. Cualquier desarrollador de Android debería entender fácilmente el código. –

+0

Una cosa, sin embargo, @GiantRobot. Este ejemplo se comporta más como setInterval que setTimeout. Los cambios necesarios para usar este código para setTimeout serían: cambiar el orden de los valores (60000, 0 en vez de 0, 60000) y detener el temporizador en la función run(), de modo que solo se ejecute una vez. –

1

hay un método setTimeout() en underscore-java biblioteca.

ejemplo Código:

import com.github.underscore.lodash.$; 
import com.github.underscore.Function; 

public class Main { 

    public static void main(String[] args) { 
     final Integer[] counter = new Integer[] {0}; 
     Function<Void> incr = new Function<Void>() { public Void apply() { 
      counter[0]++; return null; } }; 
     $.setTimeout(incr, 100); 
    } 
} 

La función se iniciará en 100 ms con un nuevo hilo.

1

Como continuación a la respuesta Valentyn usando java subrayado:

Añadir a la dependencia Gradle:

dependencies { 
    compile group: 'com.github.javadev', name: 'underscore', version: '1.15' 
} 

Java:

import com.github.underscore.lodash.$; 

$.setTimeout(new Function<Void>() { 
    public Void apply() { 
     // work 
     return null; 
    } 
}, 1000); // 1 second 
Cuestiones relacionadas