Sono sorpreso che non vi sia alcuna risposta che menzioni la soluzione con RxJava2 . È davvero semplice e offre un modo semplice per impostare il timer in Android.
Per prima cosa devi impostare la dipendenza Gradle, se non l'hai già fatto:
implementation "io.reactivex.rxjava2:rxjava:2.x.y"
(sostituire x
e y
con il numero di versione corrente )
Dato che abbiamo solo un TASK semplice, NON RIPETENTE , possiamo usare l' Completable
oggetto:
Completable.timer(2, TimeUnit.SECONDS, Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(() -> {
// Timer finished, do something...
});
Per REPEATING TASK , è possibile utilizzare Observable
in modo simile:
Observable.interval(2, TimeUnit.SECONDS, Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(tick -> {
// called every 2 seconds, do something...
}, throwable -> {
// handle error
});
Schedulers.computation()
assicura che il nostro timer sia in esecuzione su thread in background e .observeOn(AndroidSchedulers.mainThread())
significa che il codice che eseguiamo dopo la fine del timer verrà eseguito sul thread principale.
Per evitare perdite di memoria indesiderate, è necessario assicurarsi di annullare l'iscrizione in caso di distruzione di Attività / Frammento.