2

我需要手动将位图添加到指定 URI(作为键)的缓存中。如果下载图像的请求 URI 与密钥匹配,我需要管道从缓存中加载位图,而不是进行网络调用。

我找到了这个方法Fresco.getImagePipelineFactory().getBitmapMemoryCache().cache( cacheKey, closeableReference)。但是如何获得对任意位图的 closableReference。请帮忙。谢谢你。

4

2 回答 2

1

如果您使用 Fresco 加载图像 - 是的:

public class OperationPostprocessor extends BasePostprocessor {
  private int myParameter;

  public OperationPostprocessor(int param) {
    myParameter = param;
  }

  public void process(Bitmap bitmap) { 
    doSomething(myParameter);
  }

  public CacheKey getPostprocessorCacheKey() {
    return new MyCacheKey(myParameter);
  }
}

缓存键是MyCacheKey(myParameter)

您可以在形成 ImageRequest 时使用它:

ImageRequest request = ImageRequestBuilder.newBuilderWithSource(photoUri)
                .setPostprocessor(new OperationPostprocessor())
                .build();
DraweeController controller = Fresco.newDraweeControllerBuilder()
                .setOldController(simpleDraweeView.getController())
                .setImageRequest(request)
                .build();
simpleDraweeView.setController(controller);

在这里您将使用您的后处理器:.setPostprocessor(new OperationPostprocessor())


资源:


一个细节:这里将使用壁画缓存,但我认为在Postprocessor.process(Bitmap)方法中,您可以将位图添加到自己的缓存中。

于 2015-12-09T13:27:03.893 回答
0

我在这里写了一篇解释 Fresco 的观察/经验的帖子。

也可以在中查看这篇文章

它也有解决上述问题的方法。

于 2016-07-27T15:05:04.327 回答