我创建了一个加载Bitmap图像并将它们存储在静态上下文中的类:
public class ImgLoader extends View {
public static Bitmap tree1;
public ImgLoader(Context context) {
super(context);
loadImgs();
}
public void loadImgs() {
tree1 = BitmapFactory.decodeResource(getResources(), R.drawable.tree);
}
}
然后,我通过这样做访问此图像:
Bitmap tree = ImgLoader.tree1;
有没有其他选择做这样的事情?因为它可能会导致GC出现一些问题。
答案 0 :(得分:2)
您可以将此方法添加到您的课程
public void recycleBitmap(){
if(tree1 != null){
tree1.recycle();
}
tree1 = null;
}
答案 1 :(得分:0)
是。以静态方式加载位图对于垃圾收集是不利的。由于位图将保留在内存中,因此它将消耗内存并且不会被垃圾回收。但是好处很少。
这是显示图像的更好方法。如果您多次使用相同的图像,使其静态并重复使用肯定会节省一些内存。此外,如果您想在多个视图上显示图像而不想加载它们,将其设置为静态将对您有所帮助。我们知道,膨胀UI是一项繁重的操作,以便从IO加载位图。因此静态图像很好用,特别是如果需要多个副本。
答案 2 :(得分:0)
您可以使用SoftReference
存储对图像的引用。然后,如果你的程序中没有地方使用图像,垃圾收集器可以自由清理它。
如果图像已被垃圾收集,您将需要重新加载图像,否则它将保留在内存中以备重新使用。