【发布时间】:2013-10-17 12:53:29
【问题描述】:
我正在尝试为我的应用程序构建缓存从网络下载的图像的最有效方法,几年前我尝试这样做,但直到我偶然发现在这里找到惰性列表适配器:
Lazy load of images in ListView
这在引入 android 4.0 之前运行良好,此时应用程序会在加载 10 到 20 张图像后崩溃,而不是之前我可以简单地加载任意数量的图像而没有任何问题,后来我发现了是冰淇淋三明治对每个应用程序的内存使用设置了限制的结果,这在 Gingerbread 2.3 及以下版本中不存在,我最终决定每隔 10 左右的图像清除一次缓存以避免崩溃,但是用户体验不是这样做的结果非常好,并且该应用程序使用了大量数据,因为它不断地一遍又一遍地重新下载已经查看过的图像,此后我尝试使用 lru 缓存,但这似乎根本不起作用,特别是当我离开应用程序并重新启动它时,似乎所有图像都已发布,我需要一种更好的方法来做到这一点,我注意到其他应用程序(如 instagram)似乎已经找到了一种缓存数百兆图像的方法,我始终必须手动清除我的设置中的 instagram 缓存,因为它们似乎能够存储无限大小的缓存,似乎永远不会弹出其内容,有人知道如何构建这种缓存吗?
【问题讨论】:
-
“我后来发现这是冰淇淋三明治对每个应用程序的内存使用设置限制的结果,这在 Gingerbread 2.3 及以下版本中不存在”——是的,确实如此。跨度>
-
如果是这种情况,为什么当我的手机从 2.3 更新到 40 时,我突然无法在该缓存中存储许多图像?
-
我无从得知。您显然也没有,因为您似乎没有使用 DDMS 和 MAT 来确定内存问题的根源。但是,您关于内存使用的说法完全不正确。自 Android 1.0 以来,Android 就有堆大小限制。根据屏幕分辨率和操作系统版本,它们从最初的 16MB 限制增加。
标签: android caching android-lru-cache diskcache