Я удивлен, что нет ответа, который упомянул бы решение с RxJava2 .Это действительно просто и предоставляет простой способ настройки таймера в Android.
Сначала вам нужно настроить зависимость от Gradle, если вы еще этого не сделали:
implementation "io.reactivex.rxjava2:rxjava:2.x.y"
(заменить x
и y
с номер текущей версии )
Так как у нас есть простая, НЕПОВТОРАЯ ЗАДАЧА , мы можем использовать Completable
объект:
Completable.timer(2, TimeUnit.SECONDS, Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(() -> {
// Timer finished, do something...
});
Для ПОВТОРЯЯ ЗАДАНИЕ , вы можете использовать Observable
аналогичным образом:
Observable(2, TimeUnit.SECONDS, Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(tick -> {
// called every 2 seconds, do something...
}, throwable -> {
// handle error
});
Schedulers.computation()
гарантирует, что наш таймер работает в фоновом потокеи .observeOn(AndroidSchedulers.mainThread())
означает, что код, который мы запускаем после завершения таймера, будет выполнен в главном потоке.
Чтобы избежать нежелательных утечек памяти, вы должны отменить подписку, когда действие / фрагмент уничтожен.