如何在安卓游戏中释放内存

3
我使用位图为Android创建了一个2D游戏。在关闭游戏后,Android Studio内存部分显示该内存没有被释放。那么如何释放为位图分配的内存。我有一个名为chopper的位图数组,并且我正在像下面这样初始化它:
    chopper[0] = BitmapFactory.decodeResource(getResources(), R.drawable.copter1);
    chopper[1] = BitmapFactory.decodeResource(getResources(), R.drawable.copter2);
    chopper[2] = BitmapFactory.decodeResource(getResources(), R.drawable.copter3);

在关闭游戏时,我尝试释放内存,例如:
chopper[0]=null;

但它不会在Android Studio内存图中显示可用内存。这是释放内存的方法吗?如果不是,那我该如何在关闭游戏之前释放内存。提前感谢您的帮助。
2个回答

1
在Java中,将一个对象设为null并不会释放内存。如果没有任何地方引用该对象,则垃圾回收器可能会在下一次运行时释放内存。

在您的情况下,假设您在活动中使用此数组,请在活动的onDestroy()方法中关闭可能正在使用此数组的所有资源,并确保在活动销毁后没有浮动对象引用此对象。

我知道你刚才说的概念。但是我正在尝试在关闭游戏之前强制清除内存。Java中是否有相应的代码可以实现这个功能? - Akshay Bhat 'AB'

0

您必须调用bitmap.recycle() API来实际释放内存。 请查看有关位图内存管理的官方文章。


我尝试过这个,但是 Android Studio 的内存映射仍然显示内存没有被清除。 - Akshay Bhat 'AB'
可能是的,因为我在退出游戏时将所有其他对象初始化为 null。 - Akshay Bhat 'AB'
在Android Debug Monitor中跟踪内存分配,并查看实际分配内存的位置(例如android.graphics.BitmapFactory)。 - dasar
这是我关闭游戏后仍然分配的内存的截图 - Akshay Bhat 'AB'
你必须找出它来自哪里。有很多教程可以告诉你如何做到这一点。这是一个大主题。 - dasar
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接