Archives par étiquette : timer

Android : Répéter une action (timer)

Dans android pour répéter une action à intervalles réguliers on peut utiliser timertask , mais pour d’obscures raisons , il m’est arrivé d’avoir des problèmes avec ce timer.
Du coup, une solution qui semble fonctionner à merveille est l’utilisation d’un handler et d’un runnable :

private Handler myHandler;
private Runnable myRunnable = new Runnable() {
@Override
public void run() {
    // Code à éxécuter de façon périodique

    myHandler.postDelayed(this,500);
    }
};

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

    myHandler = new Handler();
    myHandler.postDelayed(myRunnable,500); // on redemande toute les 500ms
}

public void onPause() {
    super.onPause();
    if(myHandler != null)
        myHandler.removeCallbacks(myRunnable); // On arrete le callback
}

On demande simplement au handler un appel retardé du runnable (ici 500ms) puis dans le runnable on répète cette opération.
On rentre ainsi dans une « boucle infinie » qui nous permet d’exécuter le code du runnable à intervale régulier.

Ne pas oublier de stopper le tout avant de quitter l’activité (ou avant) via removeCallback(Runnable).