有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java可以快速从内存中卸载位图

我正在用Java创建这个Android游戏。我有很多图像,但不需要同时使用它们,所以我创建了一个资源管理器类,它负责处理正在使用的位图。然而,我发现从内存中清除位图的速度非常慢。我目前正在做这样的事情:

bitmap.recycle()
bitmap = null

System.gc (also tried Runtime.getRuntime().gc())

首先,是否有任何方法可以更快地从内存中卸载位图,或者是否有可能以某种方式检查它们是否确实已被清除,以便我可以使加载屏幕也依赖于此


共 (1) 个答案

  1. # 1 楼答案

    当我们尝试System.gc()时,无法保证垃圾收集器会真正运行,因为gc()需要某些先决条件,比如资源不足。很明显,调用gc()只会浪费关键的CPU周期。作为开发人员,我们可以通过取消引用来收集gc中不必要的对象

    在创建游戏系统(game)时,有几种优化技术可能会有所帮助

    1. 使用纹理。这是一个example

    2. 使用Sprite和SpriteSheets(它给系统带来的开销比加载单个位图要少)。许多开源游戏引擎都在使用它。如果你不想使用它们,那就想一想如何从这些资源中从头开始创建

    3. 使用这些标准的android文档了解Loading Large Bitmaps EfficientlyCaching Bitmaps以更好地使用位图。其想法是,当用户设备的效率不足以处理游戏的处理量和/或内存不足时,您可以始终缩小位图的比例(为了更好的响应而降低质量)

    4. 始终针对内存泄漏问题测试应用程序。这里有一个nice post会有帮助

    5. 在同一场景中,将在游戏中多次使用的物品保留在内存中(使用后不要释放)。原因是将图像加载到内存中需要很多时间

    希望这对你有帮助