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

标签 java android android-layout caching bitmap

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

相关文章:

android - 如何制作弯曲的圆形 ScrollView

android - 如何从 Android 布局文件中读取 XML

android styles.xml 找不到与给定名称 : attr 匹配的资源

java - Shift+单击以选择 JavaFX TableView 中的多个单元格挂起

java - 如何解决问题: "java.lang.RuntimeException: For ExpandableListView, use setAdapter(ExpandableListAdapter) instead of setAdapter(ListAdapter)"

java - ActionBar setBackgroundDrawable强制关闭

android - 如何自动调整 TextView 中的文本大小以适应垂直和水平可用空间?

java - 列表中的 JTree<文件>

android - RuntimeException : Method putExtra in android. content.Intent 未被模拟

Android - 在没有对话框的情况下显示不确定的进度条