我希望壁画在连接到互联网时下载并将图像保存到SD卡。 稍后当离线时,即使清除缓存,我仍需要壁画来显示已保存的图像。 这可能吗?如果是,怎么样?
当清除缓存时,简单地将图像保存到磁盘缓存似乎不起作用。
答案 0 :(得分:2)
Fresco为您缓存图像。如果您处于离线状态,则仍应显示图像。你不应该做任何事情。
但是,当清除缓存时(例如,当用户按下按钮或设备空间不足时),图像显然会从缓存中删除 - 这是不应更改的所需行为。
有两个选项:保存所选项目,移动缓存
如果您想要保留所选图像(例如“保存”按钮),您可以获取编码图像并将其保存在设备上的某个位置。 您不应对所有图片执行此操作,因为它们将在磁盘上2次并清除缓存/卸载应用程序将在设备上留下1份副本。
这样的事情可行:
DataSource<CloseableReference<PooledByteBuffer>>
dataSource = Fresco.getImagePipeline().fetchEncodedImage(imageRequest, callerContext);
dataSource.subscribe(new BaseDataSubscriber<CloseableReference<PooledByteBuffer>>() {
@Override
protected void onNewResultImpl(DataSource<CloseableReference<PooledByteBuffer>> dataSource) {
CloseableReference<PooledByteBuffer> encodedImage = dataSource.getResult();
if (encodedImage != null) {
try {
// save the encoded image in the PooledByteBuffer
} finally {
CloseableReference.closeSafely(encodedImage);
}
}
}
@Override
protected void onFailureImpl(DataSource<CloseableReference<PooledByteBuffer>> dataSource) {
// something went wrong
}
}, executorService);
}
有关如何使用管道获取编码图像的更多信息:http://frescolib.org/docs/using-image-pipeline.html
请记住,当缓存移动到外部目录时,这会保留缓存,因此请小心,因为这会在卸载应用时保留文件。
Fresco还允许您提供自定义DiskCacheConfig
,您可以创建新的DiskCacheConfig.Builder
并致电setBaseDirectoryPath(File)
以更改其他文件夹的路径(例如SD卡上的路径)您还可以使用setBaseDirectoryName(String)
有关Fresco如何缓存的更多信息:http://frescolib.org/docs/caching.html
答案 1 :(得分:1)
下载时需要手动将图像保存到磁盘。显示图像时,检查图像是否在磁盘中:如果不是,请从URL下载(并保存到磁盘)。