¿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 ().

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.

  • Manejador o temporizador android
  • Eventos retardados en Android
  • PostAtTime no desencadena
  • Android: cómo utilizar un temporizador
  • Visibilidad de un botón en el temporizador
  • Java cronometrar, System.nanoTime () batear que System.currentTimeMillis () pero persiste sobre sueño?
  • Java - Timer.cancel () v / s TimerTask.cancel ()
  • Android CountDownTimer - last onTick no llamado - ¿qué solución limpia para usar?
  • ¿Cómo cambiar el retraso del hilo de sueño / temporizador en android durante el tiempo de ejecución?
  • ¿Cómo usar Android AlarmManager con intervalos pequeños como 1 minuto?
  • Lanzar null pointerException en Timer.Schedule ();
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.