Мы настроили Fresco, используя шаги, упомянутые в документации здесь - http://frescolib.org/docs/configure-image-pipeline.html.
ImagePipelineConfig config = ImagePipelineConfig
.newBuilder(this)
.setBitmapsConfig(Bitmap.Config.RGB_565)
.setRequestListeners(requestListeners)
.setDownsampleEnabled(true)
.build();
Fresco.initialize(this, config);
Это настраивается один раз в приложении onCreate по мере необходимости. Мало изображений из сети и размер не может быть сопоставлен, поэтому мы должны использовать setDownsampleEnabled с опцией изменения размера.
Ниже приведен код, используемый для загрузки изображения -
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.parse(asseturl))
.setProgressiveRenderingEnabled(true)
.setResizeOptions( new ResizeOptions(width,height))
.build();
DraweeController controller = Fresco.newDraweeControllerBuilder()
.setImageRequest(request)
.setOldController(sdv.getController())
.setTapToRetryEnabled(true)
.build();
sdv.setController(controller);
Контроллер имеет значение null в методах onViewDetachedFromWindow и onViewRecycled Recyclerview.
В течение нескольких минут после запуска приложения используемая память очень высока.
График памяти профилировщика выглядит не очень красиво.
График памяти Android Profiler
Дамп кучи прикреплен для справки.
Дамп кучи
Также проверил журнал на фреску. В журнале упоминается понижающая дискретизация несколько раз для одного и того же изображения. Я подтвердил, что запрос на изображение делается только один раз.
Прикрепленный снимок Logcat
Снимок журнала Fresco для изображения