我正在开发一个Android应用程序,我需要在recyclerview中显示一些图像。我想立即下载图像并将其保存在android的缓存或内部存储中,然后如果存储中有图像则显示内部存储中的图像,如果没有则从服务器加载和下载。
我不希望这些图片出现在用户的图库应用中。
我只是想知道架构,而不是关于如何做的代码。
缓存和内部存储之间有什么区别吗?我是否需要获得将图像保存在缓存中的权限?
编辑:
我的问题与@Dima建议的不同,在那个问题中,他没有缓存图像或将其保存在内部存储中,我估计。
答案 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>