gpt4 book ai didi

java - 具有对值的弱引用的弱 HashMap ?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:26:06 26 4
gpt4 key购买 nike

我正在构建一个 Android 应用程序,其中每个实体都有一个代表其 Sprite 的位图。但是,每个实体都可以复制(例如实体 asdf 可能有 3 个副本)。

一种方法是预先加载所有 Sprite ,然后将正确的 Sprite 放入实体的构造函数中。

但是,我想延迟解码位图,以便实体的构造函数解码位图。唯一的问题是重复的实体将加载相同的位图两次,使用 2 倍的内存(如果实体创建 n 次,则为 n 次)。

为了解决这个问题,我构建了一个 SingularBitmapFactory,它将解码的位图存储到散列中,如果再次请求相同的位图,将简单地返回之前散列的位图,而不是构建一个新位图。但是,这个问题是工厂持有所有位图的副本,因此永远不会被垃圾收集。

将 HashMap 切换为具有弱引用值的 HashMap 的最佳方法是什么?换句话说,我想要一个结构,如果任何其他对象持有对它的引用,则值不会被 GC,但只要没有其他对象引用它,它就可以被 GC。

最佳答案

与您所说的差不多——将 Bitmap( map 的对象端)设为 WeakReference 而不是 Bitmap。然后你必须添加一个额外的检查来查看引用是否仍然有效,然后再将它传递回你的实体。这是总体思路的简要概述。

public class SingularBitmapFactory { 
private HashMap <String, WeakReference<Bitmap>> cache = new HashMap<String, WeakReference<Bitmap>>();

public Bitmap getBitmap(String key) {
Bitmap image = null;
WeakReference<Bitmap> ref = cache.get(key);
if(ref != null) {
image = ref.get();
}
if(image == null) {
// Load image here ...
cache.put(key, new WeakReference<Bitmap>(image));
}
return image;
}
}

关于java - 具有对值的弱引用的弱 HashMap ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13889051/

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