如何从服务器缓存Android中的图像并显示它?

时间:2017-09-23 16:49:07

标签: android image picasso

我正在开发一个Android应用程序,我需要在recyclerview中显示一些图像。我想立即下载图像并将其保存在android的缓存或内部存储中,然后如果存储中有图像则显示内部存储中的图像,如果没有则从服务器加载和下载。

我不希望这些图片出现在用户的图库应用中。

我只是想知道架构,而不是关于如何做的代码。

缓存和内部存储之间有什么区别吗?我是否需要获得将图像保存在缓存中的权限?

编辑:

我的问题与@Dima建议的不同,在那个问题中,他没有缓存图像或将其保存在内部存储中,我估计。

1 个答案:

答案 0 :(得分:-1)

Glide是一个很棒的库,用于异步显示图像。

Glide的磁盘缓存策略:

Glide 3.x& 4.x:bool isPublic(Type t) { return t.IsVisible && t.IsPublic && !t.IsNotPublic && !t.IsNested && !t.IsNestedPublic && !t.IsNestedFamily && !t.IsNestedPrivate && !t.IsNestedAssembly && !t.IsNestedFamORAssem && !t.IsNestedFamANDAssem; } bool isInternal(Type t) { return !t.IsVisible && !t.IsPublic && t.IsNotPublic && !t.IsNested && !t.IsNestedPublic && !t.IsNestedFamily && !t.IsNestedPrivate && !t.IsNestedAssembly && !t.IsNestedFamORAssem && !t.IsNestedFamANDAssem; } // only nested types can be declared "protected" bool isProtected(Type t) { return !t.IsVisible && !t.IsPublic && !t.IsNotPublic && t.IsNested && !t.IsNestedPublic && t.IsNestedFamily && !t.IsNestedPrivate && !t.IsNestedAssembly && !t.IsNestedFamORAssem && !t.IsNestedFamANDAssem; } // only nested types can be declared "private" bool isPrivate(Type t) { return !t.IsVisible && !t.IsPublic && !t.IsNotPublic && t.IsNested && !t.IsNestedPublic && !t.IsNestedFamily && t.IsNestedPrivate && !t.IsNestedAssembly && !t.IsNestedFamORAssem && !t.IsNestedFamANDAssem; } 没有任何内容,正如所讨论的那样

Glide 4.x:DiskCacheStrategy.NONE,Glide 3.x:DiskCacheStrategy.SOURCE仅缓存原始的全分辨率图像。在我们上面的示例中,将是1000x1000像素的一个

Glide 4.x:DiskCacheStrategy.DATA Glide 3.x:DiskCacheStrategy.RESOURCE仅在最终图像缓存后,降低分辨率(以及可能的转换)(Glide 3.x的默认行为)

仅限Glide 4.x:DiskCacheStrategy.RESULT根据资源智能选择缓存策略(Glide 4.x的默认行为)

Glide 3.x& 4.x:DiskCacheStrategy.AUTOMATIC缓存图像的所有版本 作为最后一个例子,如果你有一个你知道经常操作的图像并制作一堆不同版本的图像,那么仅缓存原始分辨率是有意义的。因此,我们告诉Glide只保留原文:

示例:

Glide 4.x

DiskCacheStrategy.ALL

Glide 3.x

GlideApp  
    .with(context)
      .load(eatFoodyImages[2])
      .diskCacheStrategy(DiskCacheStrategy.DATA)
      .into(imageView3);

并且缓存将位于您应用的数据文件夹中,因此无法显示在用户库中。<​​/ p>