gpt4 book ai didi

android - 使用缓存提高带有图像的 Android ListView 中的滚动性能

转载 作者:行者123 更新时间:2023-11-29 18:18:40 25 4
gpt4 key购买 nike

我目前正在使用文件系统缓存来缓存我从服务器下载的图像。我有一个包含自定义 View 的 ListView,当调用 getView() 时,每个 View 都会从文件系统中检索其图像。

为了提高性能,我实现了一个 java.util.WeakHashMap<String,Bitmap>通过唯一的键存储每个位图。这允许我在下载图像时将它们塞入 HashMap 中,然后直接从内存中检索它们以填充我的 ListView 。这避免了文件 I/O 操作并带来更流畅的滚动体验。

这个想法是当操作系统内存不足时,它将清除 WeakHashMap 以释放内存。

但是,这不适用于 Android 2.3 或更早版本。问题是位图没有保存在 Java 堆中,而是保存在 native 内存中。这意味着 JVM 垃圾收集器不知道这些图像占用了多少内存,因此当操作系统的 native 内存不足时从不费心释放它们,从而在仍有大量内存可以回收时导致 OutOfMemory 错误。

这已在 Android 3.0 中修复,因为 3.0 将位图存储在 JVM 堆中而不是 native 内存中,但问题是我如何在 Android 2.3 及更高版本上轻松缓存位图而不会无意中导致不必要的 OutOfMemory 异常?

最佳答案

您可以尝试这样的操作:http://code.google.com/p/xlarge-demos/source/browse/trunk/PhotoAlbum/src/com/example/android/photoalbum/LruCache.java并在逐出步骤中显式recycle() 您的位图。

关于android - 使用缓存提高带有图像的 Android ListView 中的滚动性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6718855/

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