Fresco为图像缓存消耗更多内存?

时间:2018-01-30 09:32:07

标签: android fresco image-caching

我正在处理其中一个正在下载图片的聊天应用程序。

最近我转而使用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);
    }
}

1 个答案:

答案 0 :(得分:0)

Fresco具有不同的内存缓存,用于编码和解码图像。如果要执行此操作,可以将缓存大小自定义为与以前的应用程序类似。 有关缓存的更多信息,请访问:http://frescolib.org/docs/caching.html

为了自定义缓存,您可以将自己的MemoryCacheParams传递给ImagePipelineConfig以获取编码和位图(已解码)缓存。

您正在调整图像大小,这很棒。您还可以考虑启用下采样,这可能更高效。请查看http://frescolib.org/docs/resizing.html,详细了解哪种方式更适合您的应用(缩减采样与调整大小)。