Fresco потребляет больше памяти для кэширования изображений?

Я работаю над одним из приложений чата, где загружаются изображения.

Недавно я перешел на Fresco для кэширования памяти. Я не использую Fresco для загрузки изображений, но использую fresco для просмотра изображений путем создания URI с использованием уже загруженного локального файла.

Однако согласно профилировщику Android было замечено, что Fresco потребляет больше памяти по сравнению с моим старым механизмом кэширования памяти.

Я не использовал дополнительные настройки и просто использовал "Fresco.initialize(context)" для инициализации.

не могли бы вы подсказать, где я делаю ошибку? Вот мой код:

private void setImage(Context context, boolean isSvg, final SimpleDraweeView imageView, final String filePath, ImageData data) {
    GenericDraweeHierarchy hierarchy = GenericDraweeHierarchyBuilder.newInstance(context.getResources()).build();
    if(data.isFadeInBitmap()) {
        hierarchy.setFadeDuration(FADE_IN_TIME);
    }
    if(data.isRound()) {
        hierarchy.setRoundingParams(RoundingParams.asCircle());
    }
    int width = imageView.getLayoutParams().width;
    int height = imageView.getLayoutParams().height;
    ImageRequestBuilder imageRequestBuilder = ImageRequestBuilder.newBuilderWithSource(UriUtil.getUriForFile(new File(filePath)));
    if (width > 0 && height > 0) {
        imageRequestBuilder.setResizeOptions(new ResizeOptions(width, height));
    }
    DraweeController controller = Fresco.newDraweeControllerBuilder()
            .setOldController(imageView.getController())
            .setImageRequest(imageRequestBuilder.build())
            .build();
    imageView.setHierarchy(hierarchy);
    imageView.setController(controller);

    if(isSvg) {
        imageView.setLayerType(View.LAYER_TYPE_SOFTWARE,null);
    }
}

person Piyush    schedule 30.01.2018    source источник
comment
Понижение разрешения изображения может вам помочь, но не уверен   -  person Aswin P Ashok    schedule 30.01.2018
comment
Я делаю субдискретизацию, вызывая :imageRequestBuilder.setResizeOptions(new ResizeOptions(width, height));   -  person Piyush    schedule 30.01.2018


Ответы (1)


Fresco имеет разные кэши памяти для закодированных и декодированных изображений. Вы можете настроить размеры кеша, чтобы они были похожи на ваши предыдущие приложения, если вы хотите это сделать. Дополнительную информацию о кэшировании можно найти здесь: http://frescolib.org/docs/caching.html

Чтобы настроить кеши, вы можете передать свой собственный MemoryCacheParams в ImagePipelineConfig для закодированного и растрового (декодированного) кеша.

Вы изменяете размер изображений, и это здорово. Вы также можете включить субдискретизацию, которая может быть более производительной. Посетите страницу http://frescolib.org/docs/resizing.html, чтобы узнать больше. о том, какой способ лучше для вашего приложения (понижающая выборка или изменение размера).

person Alexander Oprisnik    schedule 12.02.2018