【发布时间】:2012-12-19 23:44:20
【问题描述】:
我正在用 Java 创建这个 Android 游戏。我有很多图像,但不需要一次全部使用它们,所以我创建了一个资源管理器类来处理正在使用的位图。但是,我发现从内存中清除位图非常慢。我目前正在做这样的事情:
bitmap.recycle()
bitmap = null
System.gc (also tried Runtime.getRuntime().gc())
首先,有什么方法可以更快地从内存中卸载位图,或者是否有可能以某种方式检查它们是否真的被清除,以便我可以让加载屏幕也依赖于此?
【问题讨论】:
-
您可能会考虑使用现有的位图缓存引擎而不是自己滚动:senab.co.uk/2012/12/18/android-bitmapcache-the-rebirth
-
速度慢的原因是你正在调用 gc。让它在需要时运行。 +1 @CommonsWare 无需重新发明轮子。
-
调用 .recycle() 并将其设置为 null 实际上应该这样做。无需调用 .gc() :)
-
@RasmusAppelkvist - 如果即将耗尽内存,JVM 将积极运行垃圾收集。你的责任以确保对象可以被垃圾回收结束。
-
对此,我要补充一点,每次调用 System.GC 都会进行一次完整的垃圾回收;即使没有什么可收集的,这将是一个缓慢的操作。将其留给 Android 系统通常是一个更好的主意;这可能会选择频率和 - 最重要的 - 以比每次释放位图时简单地调用完整 GC 更好的方式执行的 GC 类型。