我正在构建一个android应用程序,其中每个实体都有一个代表其精灵的位图。但是,每个实体都可以被复制(例如,可能有3个实体asdf副本)。弱引用值的弱散列表?
一种方法是先加载所有的精灵,然后将正确的精灵放入实体的构造函数中。
但是,我想懒散地解码位图,以便实体的构造函数将解码位图。唯一的问题是重复的实体会使用两倍的内存来加载相同的位图(如果实体创建了n次,则重复n次)。
为了解决这个问题,我构建了一个SingularBitmapFactory,它将一个解码的Bitmap存储到一个散列中,并且如果再次询问相同的位图,只会返回之前散列的一个,而不是构建一个新散列。不过,问题在于工厂拥有所有位图的副本,因此不会收集垃圾。
将hashmap切换为弱引用值的最佳方式是什么?换句话说,我想要一个结构,如果任何其他对象持有对它的引用,值就不会GC'd,但只要没有其他对象引用它,那么它就可以GC'd。
比你!这是非常简单和非常有效的情况下处理位图。只是使用绝对路径作为一个关键,它非常方便,并有助于摆脱泄漏 –