onBindViewHolder - правильное место для запуска загрузки изображения. Когда ваш макет раздут, вы должны увидеть, что onBindViewHolder вызывается для всех видимых элементов, иногда с буфером для следующего элемента, в зависимости от обрезки. Если вы видите, что onBindViewHolder вызывается значительно чаще, чем имеет смысл (например, вы видите 20 элементов на экране, но он вызывается 100 раз), то вам следует убедиться, что макеты имеют заданный размер.
Например, если вы отображаете карты, а ширина карты не устанавливается до тех пор, пока изображение не будет загружено, ваша ширина может фактически составлять 0, поэтому каждая карта в этом ряду связана, что вызывает запросы на изображения. ImageCardView имеет вспомогательный метод setMainImageDimensions для установки LayoutParams, поэтому вы можете вызывать его либо в onCreateViewHolder (если размер одинаков для всех элементов), либо в onBindViewHolder (если размер зависит от элемента).