gpt4 book ai didi

java - 缓存已存储在文件系统上的解码位图

转载 作者:行者123 更新时间:2023-12-01 13:47:59 25 4
gpt4 key购买 nike

我正在制作一些小位图,大约有 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com