2012-05-15 20 views
6

Estoy tratando de mantener las bases de datos sincronizadas entre un servicio web y la aplicación de Android. El código de abajo está trabajando, pero me encuentro con algunos problemas:¿Cómo iniciar/detener Runnable/Handler?

  • Cada vez que voy a la página principal de la aplicación se inicia un nuevo proceso infinito.
  • El proceso nunca termina

Puede alguien explicar cómo iniciar y detener este proceso como deseo?
Quiero que este proceso se ejecute cada 5 minutos, pero solo una vez y cuando la aplicación esté abierta.

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    final Handler handler = new Handler(); 
    final Runnable r = new Runnable() { 
     public void run() { 
      // DO WORK 
      Mantenimiento(); 
      // Call function. 
      handler.postDelayed(this, 1000000); 
     } 
    }; 
    r.run(); 
} 
+1

use removeCallback. http://developer.android.com/reference/android/os/Handler.html#removeCallbacks%28java.lang.Runnable%29 – Blackbelt

+1

puede detener ** Handler ** con este ** handler.removeCallbacks(); * * –

+0

pero necesito detenerlo desde onDestroy – Zartch

Respuesta

3

o bien utilizar TimerTask:

http://thedevelopersinfo.wordpress.com/2009/10/18/scheduling-a-timer-task-to-run-repeatedly/ http://android.okhelp.cz/timer-simple-timertask-java-android-example/

o

puede tomar Boolean y ejecuta el bucle mientras que boolean es verdadero y hace que duerma en otro subproceso y, al salir de la aplicación, hace que Boolean sea falso.

+0

Usando TimerTask puedo controlar la tarea. Gracias. – Zartch

+2

No use temporizadores de Java en Android. No son confiables. Los manipuladores son los equivalentes del temporizador en Android. – black

0

sería utilizar este código:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    final Handler handler = new Handler(); 
    final Thread r = new Thread() { 
     public void run() { 
      // DO WORK 
      Mantenimiento(); 
      // Call function. 
      handler.postDelayed(this, 1000000); 
     } 
    }; 
    r.start(); // THIS IS DIFFERENT 
} 
+0

The Thread me da exactamente los mismos problemas. – Zartch

0

cada 5 minutos? ¿Sabes incluso qué hace handler.postDelayed(this, 1000000);? Inicia el ejecutable cada 16,7 minutos. No es muy difícil averiguar cómo convertir minutos en milisegundos.

handler.removeCallbacks() y la variable booleana que verificaría antes de postDelayed() ya se mencionaron.

Cuestiones relacionadas