我正在制作一些小位图,大约有 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 意味着在 MyIcon 内部创建一个扩展 LruCache 的静态嵌套类。然后,对于 MyIcon 的每个实例,当其位图从 LruCache 中逐出时,我需要确保关联的 myImage 设置为 null。这看起来很复杂,我什至不确定它是否有效。也许这里的 Java 专家可以告诉我如何知道它是否有效,我应该实现它。
最佳答案
位图解码需要相当长的时间。最佳实践是使用LruCache
。
查看本教程 here
由于您使用的是 ListView,因此仅在适配器的 getView()
方法中加载它们。还可以使用 AsyncTask 来初始化它们
关于java - 缓存已存储在文件系统上的解码位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20202291/