我正在处理其中一个正在下载图片的聊天应用程序。
最近我转而使用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);
}
}
答案 0 :(得分:0)
Fresco具有不同的内存缓存,用于编码和解码图像。如果要执行此操作,可以将缓存大小自定义为与以前的应用程序类似。 有关缓存的更多信息,请访问:http://frescolib.org/docs/caching.html
为了自定义缓存,您可以将自己的MemoryCacheParams
传递给ImagePipelineConfig以获取编码和位图(已解码)缓存。
您正在调整图像大小,这很棒。您还可以考虑启用下采样,这可能更高效。请查看http://frescolib.org/docs/resizing.html,详细了解哪种方式更适合您的应用(缩减采样与调整大小)。