Java Android ImageDownloader类中可能存在的错误:sHardBitmapCache不是静态的,应该是什么时候?

Java Android ImageDownloader类中可能存在的错误:sHardBitmapCache不是静态的,应该是什么时候?,java,android,performance,caching,dalvik,Java,Android,Performance,Caching,Dalvik,我一直在努力学习尽可能多的关于Android开发的知识,特别关注性能,因为现在Play store中的许多应用程序都很缓慢。我发现/被引导到许多文章/视频 关于图像缓存的一篇特定文章位于: 作者的代码位于: 谷歌似乎将一个版本的应用于以下示例类: 一般来说,它是可靠的,除了我认为缓存中的一个缺陷。它使用软/硬缓存,将东西放入/获取到硬缓存中,因为Android系统经常重置软缓存 但是,看看代码,人们开始怀疑是否每次实例化父类时都会意外地重置硬缓存 首先是软缓存: // Soft cach

我一直在努力学习尽可能多的关于Android开发的知识,特别关注性能,因为现在Play store中的许多应用程序都很缓慢。我发现/被引导到许多文章/视频

关于图像缓存的一篇特定文章位于:

作者的代码位于:

谷歌似乎将一个版本的应用于以下示例类:

一般来说,它是可靠的,除了我认为缓存中的一个缺陷。它使用软/硬缓存,将东西放入/获取到硬缓存中,因为Android系统经常重置软缓存

但是,看看代码,人们开始怀疑是否每次实例化父类时都会意外地重置硬缓存

首先是软缓存:

    // Soft cache for bitmaps kicked out of hard cache
    private final static ConcurrentHashMap<String, SoftReference<Bitmap>> sSoftBitmapCache =
        new ConcurrentHashMap<String, SoftReference<Bitmap>>(HARD_CACHE_CAPACITY / 2);

问题


说了这么多,还有其他人经历过吗???或者我是一个疯狂/错误的组合。我不是Java/Android/JVM/Dalvik/WeakReference/SoftReference专家,但似乎有些不对劲。我不知道为什么sHardBitmapCache不是静态的,但是当我进行更改时,我的应用程序停止了对web的访问(节省数据成本/电池消耗/性能改进)

你是对的,这是我的错误


我已经修复了android源代码树中的代码。感谢您的反馈。

我只是简单地看了一下代码,但您似乎是对的-我怀疑sHardBitmapCache应该是静态的,特别是考虑到它的命名。没问题。我注意到原始代码多次被分叉/复制到GitHub上。如果不太麻烦的话,也许更新一下博客帖子是明智的,这样社区就能认识到这一变化。
    // Hard cache, with a fixed maximum capacity and a life duration
    private final HashMap<String, Bitmap> sHardBitmapCache =
        new LinkedHashMap<String, Bitmap>(HARD_CACHE_CAPACITY / 2, 0.75f, true) {
        @Override
        protected boolean removeEldestEntry(LinkedHashMap.Entry<String, Bitmap> eldest) {
            if (size() > HARD_CACHE_CAPACITY) {
                // Entries push-out of hard reference cache are transferred to soft reference cache
                sSoftBitmapCache.put(eldest.getKey(), new SoftReference<Bitmap>(eldest.getValue()));
                return true;
            } else
                return false;
        }
    };
private final ImageDownloader imageDownloader = new ImageDownloader();