Je suis surpris qu'aucune réponse ne mentionne une solution avec RxJava2 . C'est vraiment simple et fournit un moyen facile de configurer la minuterie dans Android.
Vous devez d'abord configurer la dépendance Gradle, si vous ne l'avez pas déjà fait:
implementation "io.reactivex.rxjava2:rxjava:2.x.y"
(remplacer x
et y
par le numéro de version actuel )
Puisque nous avons juste une TÂCHE simple, NON RÉPÉTABLE , nous pouvons utiliser Completable
objet:
Completable.timer(2, TimeUnit.SECONDS, Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(() -> {
// Timer finished, do something...
});
Pour RÉPÉTER LA TÂCHE , vous pouvez utiliser Observable
de la même manière:
Observable.interval(2, TimeUnit.SECONDS, Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(tick -> {
// called every 2 seconds, do something...
}, throwable -> {
// handle error
});
Schedulers.computation()
s'assure que notre minuterie fonctionne sur le fil de fond et .observeOn(AndroidSchedulers.mainThread())
signifie que le code que nous exécutons une fois le minuteur terminé sera exécuté sur le thread principal.
Pour éviter les fuites de mémoire indésirables, vous devez vous assurer de vous désabonner lorsque l'activité / le fragment est détruit.