我正在处理大量小型位图,其中大约有100个。但他们是非常小的缩略图大小的图像。我的设计是这样的,我从服务器上下载列表并将它们保存在本地文件系统中。当用户需要一个位图,我做缓存已存储在文件系统上的解码位图
BitmapFactory.decodeFile(pathName);
我的问题主要是:我应该缓存解码位图?因此,下次拨打电话时,不必再次解码,我可以返回已解码的图像。在某些情况下,这些位图会在我的应用程序中使用,所以解码的调用频繁。但另一方面,我会缓存大约100个位图。因此,新的代码将
if(null == bitmap)
return (bitmap = BitmapFactory.decodeFile(pathName));
else return bitmap;
有人可以请您谈谈对新设计的成本/收益的空间/时间复杂度,性能,完善的设计,这样的条款?此外,位图通常显示在ListView中。
为什么从@dumazy响应不是我的情况很明显:
当我从服务器上下载,我的元数据存储在一个HashMap:
Map<String,MyIcon> myIcons …
和MyIcons类是这样的:
class MyIcon{
String filepath;//path of image on local filesystem.
String url;// url to where image is on server
Bitmap myImage;// for caching so not to decode each time
...//other fields about the icon
//then a number of methods
}
从我的角度
所以,用LruCache会意味着创建内部m的静态嵌套类扩展LruCache, yIcon。然后,对于MyIcon的每个实例,当位图从LruCache中逐出时,我需要确保将关联的myImage设置为null。这看起来很复杂,我甚至不确定它会起作用。也许这里的Java专家可以告诉我如何知道它是否工作,我应该实现它。
感谢您的文章,这是一个很好的阅读。但我不太确定这对我来说是最好的解决方案。但根据你的回答,似乎我应该限制我拥有的缓存位图的数量。我会在重构中考虑这一点。 +1。 –