Фреска с высоким использованием памяти - PullRequest
0 голосов
/ 18 сентября 2018

Мы настроили 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 для изображения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...