Задержка перед выполнением слушателя. Android

159
20 ноября 2017, 17:32

Необходимо немного оптимизировать запросы в приложении Android и разгрузить процессор.

Есть строка поиска со своим слушателем событий на изменение текста в данной строке. Необходимо произвести действие1 (поиск в листе), если данные в строке не менялись более 3 секунд. Действие1 должно производится не при каждом изменении значения строки поиска с задержкой 3 сек, а только один раз, после того как строка изменялась и осталась в таком виде более 3 секунд.

Answer 1

Можно как-то так c помощью rxJava и RxBinding:

Заводим в активити переменные:

long time;
private static final int INTERVAL = 3;

Потом берём EditText и подписываемся на изменения ввода в нём, каждый раз обновляем переменную time и начинаем ждать n секунд. После ожидания проверяем, что текущее время - time больше заданного интервала и только в этом случае что-то делаем.

RxTextView.textChanges(editText)
    .doOnEach(text -> time = System.currentTimeMillis())
    .flatMap(text -> Observable.timer(INTERVAL, TimeUnit.SECONDS).flatMap(v -> Observable.just(text)))
    .observeOn(Schedullers.io())
    .subscribeOn(AndroidSchedullers.mainTread())
    .filter(text -> (System.currentTimeMillis() - time) >= INTERVAL)
    .subscribe(text - > Log.d("TAG", text));
READ ALSO
как добавить методы в HashMap (Phone Book

как добавить методы в HashMap (Phone Book

Пишу программу Телефонная книга и не получаются следующие методыHashMap у меня состоит из класса Юзер и сета Контактов (с номерами телефонов...

149
Циклическая зависимость maven модулей!

Циклическая зависимость maven модулей!

есть несколько модулей в maven

191
.split() не делит строку

.split() не делит строку

есть строка cbr-coa-dic:Osv_Dt_A_10501$dim-int:Nacz_Inostr_Valyuta_Axis/mem-int:Nacz_Valyuta_Rf_Member ее необходимо раздеить по символу $ пробовал делить String[] soch = fsplit( "$"); но деления...

133
Приведение типов при ссылке на ресурсы

Приведение типов при ссылке на ресурсы

В Activity создал переменную

147