RecyclerView.Adapter onCreateViewHolder () вызывается после notifyDataSetChanged () - PullRequest
0 голосов
/ 21 июня 2019

Я использую RecyclerView, который хорошо работает до сих пор.

На экране видны 5 элементов, у меня 7 ViewHolder, и все в порядке.

Если я прокручиваю вверх и вниз, количество экземпляров моего ViewHolder постоянно.

Теперь я проверяю свое приложение на предмет заполнения памяти и ищу утечки памяти.

Я замечаю каждый раз, когда меняю свои данные, и уведомляю адаптер:

notifyDataSetChanged();

Я получаю каждый раз 2 больше ViewHolder. Число viewType является постоянным (изменяются только данные).

Десять notifyDataSetChanged добавить 20 ViewHolder в мое приложение и съесть память.

Каждый ViewHolder содержит сложную ViewModel, поэтому я забочусь о ненужных объектах.

Это известная ошибка в Android RecyclerView?

1 Ответ

0 голосов
/ 22 июня 2019

Вам следует попытаться рассчитать различия и уведомить об изменениях элементов (желательно с полезной нагрузкой), чтобы избежать повторного создания ViewHolder с.Для этого вы можете использовать DiffUtil класс.

Если вы не можете этого сделать, вам нужно увеличить размер RecyclerView.RecycledViewPool, который по умолчанию имеет местотолько 5 ViewHolder с каждого типа:

// increases amount of recycled ViewHolders of type 0 (default) to 10
recyclerView.getRecycledViewPool().setMaxRecycledViews(0, 10);
...