Java 加载静态使用的位图对垃圾收集有害吗?
我创建了一个类,用于加载位图图像并将其存储在静态上下文中:Java 加载静态使用的位图对垃圾收集有害吗?,java,android,bitmap,garbage-collection,Java,Android,Bitmap,Garbage Collection,我创建了一个类,用于加载位图图像并将其存储在静态上下文中: public class ImgLoader extends View { public static Bitmap tree1; public ImgLoader(Context context) { super(context); loadImgs(); } public void loadImgs() { tree1 = BitmapFactory.decodeResource(getResource
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出现一些问题。您可以将此方法添加到类中
public void recycleBitmap(){
if(tree1 != null){
tree1.recycle();
}
tree1 = null;
}
对。静态加载位图不利于垃圾收集。由于位图将保留在内存中,它将消耗内存,不会被垃圾收集。然而,这并没有什么好处
这是一种更好的显示图像的方法。如果您多次使用同一个图像,将其设置为静态并重复使用肯定会节省一些内存。另外,如果您想在多个视图上显示图像,而不想加载它们,将其设置为静态将有助于您。正如我们所知,膨胀UI是一项繁重的操作,从IO加载位图也是如此。因此,静态图像很好地使用,特别是在需要多个副本的情况下 您可以使用
软引用
来存储对图像的引用。然后,如果程序中没有使用映像的位置,垃圾收集器可以自由地清理映像
如果映像已被垃圾收集,则需要重新加载它,否则它将保留在内存中,准备重新使用。在需要时加载映像。不要不必要地把它记在记忆中。