【问题标题】:How to Cache Images in Android coming from server and show it?如何在Android中缓存来自服务器的图像并显示它?
【发布时间】:2017-09-24 01:05:38
【问题描述】:
我正在开发一个 Android 应用程序,我需要在回收站视图中显示一些图像。我想立即下载图像,并可能将其保存在 android 的缓存或内部存储中,然后如果存储中有图像,则显示内部存储中的图像,如果没有,则从服务器加载和下载。
而且我不希望这些图片出现在用户的图库应用中。
我只想知道架构,而不是关于如何做的代码。
缓存和内部存储有什么区别吗?我需要获得将图像保存在缓存中的权限吗?
编辑:
我的问题与@Dima 提出的问题不同,在那个问题上,我认为他没有缓存图像或将其保存在内部存储中。
【问题讨论】:
标签:
android
image
picasso
【解决方案1】:
Glide 是一个很棒的异步显示图像库。
Glide 的磁盘缓存策略:
Glide 3.x 和 4.x:DiskCacheStrategy.NONE 没有缓存,如前所述
Glide 4.x:DiskCacheStrategy.DATA,Glide 3.x:DiskCacheStrategy.SOURCE 仅缓存原始全分辨率图像。在我们上面的示例中,这将是 1000x1000 像素的一个
Glide 4.x:DiskCacheStrategy.RESOURCE Glide 3.x:DiskCacheStrategy.RESULT 仅缓存最终图像,在降低分辨率(以及可能的转换)之后(Glide 3.x 的默认行为)
仅限 Glide 4.x:DiskCacheStrategy.AUTOMATIC 根据资源智能选择缓存策略(Glide 4.x 的默认行为)
Glide 3.x & 4.x:DiskCacheStrategy.ALL 缓存图像的所有版本
作为最后一个示例,如果您知道您会经常操作并制作一堆不同版本的图像,那么仅缓存原始分辨率是有意义的。因此,我们会告诉 Glide 只保留原始文件:
示例:
滑翔 4.x
GlideApp
.with(context)
.load(eatFoodyImages[2])
.diskCacheStrategy(DiskCacheStrategy.DATA)
.into(imageView3);
滑翔 3.x
Glide
.with( context )
.load( eatFoodyImages[2] )
.diskCacheStrategy( DiskCacheStrategy.SOURCE )
.into( imageViewFile );
缓存将在您应用的数据文件夹中,因此不会显示在用户库中。