【问题标题】:Android: keep track of number of objects in cacheAndroid:跟踪缓存中的对象数量
【发布时间】:2013-11-28 07:30:54
【问题描述】:

我正在使用 ViewPager 构建画廊。每次下载照片时,我都会立即将其缓存在 mMemoryCache 中,即

mMemoryCache = new LruCache<Integer, Bitmap>(cacheSize) {
        @Override
        protected int sizeOf(Integer key, Bitmap bitmap) {
            // The cache size will be measured in bytes rather than number
            // of items.
            return (bitmap.getRowBytes() * bitmap.getHeight());
        }
    };

如您所见,sizeOf() 在使用字节时返回数字,这是有道理的。我的问题是我的 ViewPager 的适配器需要知道我有多少页,这将是我的缓存中的对象数。

关于如何做到这一点的任何想法?谢谢!

【问题讨论】:

  • 您的 ViewPager 不应该显示所有可能的图像,而不仅仅是下载的图像吗?如果尚未下载,则不显示任何内容或显示默认图像。或者你的意图到底是什么?
  • 如果数据库太大,我只下载一堆图像,当用户接近适配器的计数时,我下载更多并更新计数,为此我需要知道如何我缓存了很多图片

标签: android size android-lru-cache


【解决方案1】:

我认为你应该重新考虑你的方法。通常,当您使用某种分页(我的意思是数据分页,而不是 ViewPager)时,您首先会向您的适配器添加一定数量的项目。您可以立即开始下载所需的资源,或者等到您真正需要它们。如果资源已下载并缓存,请签入Adapter.onCreateView()。如果是,从那里获取它,如果不是,则开始异步下载并在获得图像后立即将图像添加到视图中。同时显示一个占位符。

当您到达适配器中的最后一个项目时,向其中添加另一个批次,一切都会重新开始。

如果您真的想知道 LRUCache 中有哪些项目,请覆盖 put()entryRemoved()。在那里,您知道从缓存中添加或逐出哪些项目。不过我建议不要使用这种方法。

【讨论】:

    猜你喜欢
    • 2010-10-23
    • 2014-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-17
    • 2011-11-07
    • 1970-01-01
    相关资源
    最近更新 更多