Медленный отклик OnClick() в RecycleView
В RecycleView загружаю 10.000 строк.
Прокрутка плавная, без проблем.
В каждый строке есть imageview, но onClick выполняется с задержкой (при 50 записей норм):
vh.iv.setOnClickListener {
when (isFavorite(item.id)) {
false -> {
cipher.execSQL("update table set exam=\'1\' where id=\'${item.id}\'")
context.rateColor(vh.imgFavorite, true)
list[position].favorite = "1"
}
true -> {
cipher.execSQL("update table set exam=\'0\' where id=\'${item.id}\'")
context.rateColor(vh.imgFavorite, false)
list[position].favorite = "0"
}
}
}
Как оптимизировать, чтоб без задержки работало?
Ответы (1 шт):
Автор решения: Сергей Бувака
→ Ссылка
Вы выполняете запрос в Базу Данных на UI потоке. Естественно это не быстрая операция и она тормозит ваш UI поток. В зависимости от ваших потребностей у вас в целом есть 2 варинта.
- Это сделать запрос в рабочем потоке а действие по клику на UI потоке. Так ваш UI отреагирует быстро, а запрос сделается уже невидимо для пользователя. Этот вариант подойдет в случае если вам не важен результат от запроса или вы можете его обработать независимо от того что будет в данный момент на экране.
- Это все равно выносить запрос в рабочий поток (так вы не будете грузить UI и пользователь сможет дальше с ним взаимодействовать). И пока выполняется запрос показать какой-то лоадер на весь экран или же на конкретный элемент, тут уже от ваших задач зависит. По окончанию запроса выполнить действие в зависимости от результата. Чаще второй вариант предпочтительнее, но все зависит от задач.