Медленный отклик 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 варинта.

  1. Это сделать запрос в рабочем потоке а действие по клику на UI потоке. Так ваш UI отреагирует быстро, а запрос сделается уже невидимо для пользователя. Этот вариант подойдет в случае если вам не важен результат от запроса или вы можете его обработать независимо от того что будет в данный момент на экране.
  2. Это все равно выносить запрос в рабочий поток (так вы не будете грузить UI и пользователь сможет дальше с ним взаимодействовать). И пока выполняется запрос показать какой-то лоадер на весь экран или же на конкретный элемент, тут уже от ваших задач зависит. По окончанию запроса выполнить действие в зависимости от результата. Чаще второй вариант предпочтительнее, но все зависит от задач.
→ Ссылка