关心:这里没有代码,只有文本和一些有关位图缓存的问题
我目前正在开发一个即将完成的应用程序。我唯一想做的就是缓存图像。因为此刻,当用户打开应用程序时,该应用程序会从服务器下载图像。这些图像不是静态的,这意味着它们可以每分钟/小时/天变化。我不知道它们何时更改,因为它是按Twitter分享,Facebook点赞数量收集的图像列表。这意味着,当一张图片具有100个赞和100条推文时,它位于第1个位置。但是,当另一张图片得到更多图像时,喜欢并鸣叫,它将获得1级排名,而另一个将被置于2级排名。这不完全是我的应用程序,但您可以理解它的原理。
现在,我研究了位图缓存,以便用户不必一遍又一遍地下载相同的图像。我的问题是我该怎么做?我的意思是,我了解如何缓存位图。
我看了这篇文档文章: http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html
但是,问题是,如何知道位图是否已下载并已缓存或是否必须再次下载?我是否不必先下载映像以检查系统中是否已经有此特定映像?
我考虑过要获取图像的URL,然后将其转换为哈希。然后,使用哈希作为文件名将文件保存到缓存中。然后,当图像URL到达时,将检查图像是否在缓存中可用。如果是,它将被加载;否则,将被下载。那是要走的路吗?
还是我误解了位图缓存,而它本身已经做到了吗?
对于这些情况,我最好的建议是:不要尝试重新发明轮子。
在Android中,图像加载/缓存是一项非常复杂的任务,许多优秀的开发人员已经做到了。只需重复使用他们的工作即可。
我个人的喜好是毕加索http://square.github.io/picasso/
用它加载东西是很简单的一行代码:
Picasso.with(context).load(url).into(imgView);
就这么简单!
它同时执行RAM和磁盘缓存,处理所有线程问题,并使用出色的网络层okHttp。
编辑:
并直接访问位图,您可以:
Picasso.with(context).load(url).into(new Target() {
void onBitmapLoaded(Bitmap bitmap, LoadedFrom from){
// this will be called on the UI thread after load finishes
}
void onBitmapFailed(Drawable errorDrawable){
}
void onPrepareLoad(Drawable placeHolderDrawable){
}
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句