¿Cómo hacer un temporizador simple sin nueva clase en Android?

Estoy desarrollando un servicio para Android, que debe ejecutarse en segundo plano, ejecutando una función cada 100 segundos. Ese es el código fuente (ejemplo)

package com.example import .... public class Servizio extends Service { public IBinder onBind(Intent intent) { } public void onCreate() { } public void onDestroy() { //here put the code that stop the timer cycle } public void onStart(Intent intent, int startid) { //i want to begin here the timercycle that each 100 s call myCycle() } public void myCycle() { //code that i can't move on other class!!! } } 

¿Como puedo hacer eso? Ahora el servicio ejecuta myCycle () sólo una vez, beacause puse una llamada en onStart ().

3 Solutions collect form web for “¿Cómo hacer un temporizador simple sin nueva clase en Android?”

Utilice un temporizador con una TimerTask . Para ejecutar su método cada 100 segundos, puede utilizar lo siguiente en su método onStart . Tenga en cuenta que este método crea un nuevo subproceso.

 new Timer().schedule(new TimerTask() { @Override public void run() { myCycle(); } }, 0, 100000); 

Como alternativa, utilice un android.os.Handler como se describe en este artículo: Actualización de la interfaz de usuario desde un temporizador . Es mejor que un temporizador porque se ejecuta en el hilo principal, evitando la sobrecarga de un segundo hilo.

 private Handler handler = new Handler(); Runnable task = new Runnable() { @Override public void run() { myCycle(); handler.postDelayed(this, 100000); } }; handler.removeCallbacks(task); handler.post(task); 

Normalmente hago esto, si he entendido correctamente que quería que el myCycle para ejecutar cada 100 segundos.

 Timer myTimer = new Timer(); myTimer.schedule(new TimerTask() { @Override public void run() { myCycle(); } }, 0,100000); 

Cuando tuve este problema, donde llamo a un webservice periódicamente esta era mi solución:

 public class MyService extends Service { private Handler mHandler = new Handler(); public static final int ONE_MINUTE = 60000; private Runnable periodicTask = new Runnable() { public void run() { mHandler.postDelayed(periodicTask, 100 * ONE_MINUTE); token = retrieveToken(); callWebService(token); } }; 

Llamo el postDelayed temprano para que el retraso de la llamada webservice no causa el momento de cambiar.

Las dos funciones están realmente en la clase MyService .

ACTUALIZAR:

Puede pasar un Runnable a postDelayed como se muestra aquí:

http://developer.android.com/reference/android/os/Handler.html#postDelayed(java.lang.Runnable, largo)

public final boolean postDelayed (Runnable r, delayMillis largo)

Dado que: API Nivel 1 Hace que Runnable r se agregue a la cola de mensajes, para ejecutarse después de que transcurra la cantidad de tiempo especificada. El runnable se ejecutará en el subproceso al que está conectado este controlador.

Además, mi código no compilará debido a las funciones que faltan, esto se muestra como un ejemplo de lo que el OP puede hacer.

  • Android: desea que la aplicación realice tareas cada segundo
  • Temporizador de TextView de Android
  • Android / phonegap - Tiempo de respuesta del clic lento
  • Tema de Android Simple Timer / Timertask
  • ¿Cuál es el enfoque más eficiente en cuanto a la batería de usar LocationClient para recibir actualizaciones periódicamente?
  • Android: Acceso al elemento de interfaz de usuario desde el subproceso del temporizador
  • El temporizador no se detiene en android
  • Android: para medir el tiempo entre los dos clics de botón
  • Fiabilidad del método postDelay de Android
  • Lanzar null pointerException en Timer.Schedule ();
  • Temporizador en segundo plano
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.