2012-05-15 20 views
6

Sto provando a mantenere i database sincronizzati tra un'app Web e un'app Android. Il seguente codice funziona, ma ho incontrato alcuni problemi:Come avviare/fermare Runnable/Handler?

  • Ogni volta che vado alla pagina principale di App viene avviato un nuovo processo infinito.
  • Il processo non finisce mai

Qualcuno può spiegare come avviare e fermare questo processo come voglio?
Desidero che questo processo venga eseguito ogni 5 minuti, ma solo una volta e quando l'app è aperta.

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

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

+1

puoi fermare ** Handler ** usando questo ** handler.removeCallbacks(); * * –

+0

ma ho bisogno di fermarlo da onDestroy – Zartch

risposta

3

usare sia 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

può prendere Booleano ed esegue il ciclo mentre boolean è true e fa dormire gli altri thread e lasciando l'app booleano falso.

+0

Utilizzo di TimerTask È possibile controllare l'attività. Grazie. – Zartch

+2

Non utilizzare i timer java in Android. Non sono affidabili. Gli handler sono gli equivalenti del timer in Android. – black

0

sarebbe di questo codice:

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

La discussione mi dà gli stessi identici problemi. – Zartch

0

ogni 5 minuti? Sai anche cosa fa handler.postDelayed(this, 1000000);? Avvia il runnable ogni 16,7 minuti. Non è molto difficile scoprire come convertire minuti in millisecondi.

handler.removeCallbacks() e la variabile booleana che avresti controllato prima di postDelayed() era già menzionata.