我花了最近几天试图消除游戏中的内存泄漏,导致许多内存不足错误。我即将添加大量的图形,虽然不是很复杂,但会大大增加我的系统的处理要求,我有点担心我的内存使用情况,我希望有人可能有给我一些提示。我不想低于Android 2.1,所以请为此定制任何答案。
首先,我的游戏包括:
我游戏中的一些示例图片:
我学到了什么:
adb shell procrank
的计算,不知何时我占用24 Megs。所以,鉴于所有这些,我的问题。
答案 0 :(得分:3)
如果没有看到您的实际代码,我无法说明以下内容是否与您相关。但是,值得一试。
如果您还没有这样做,可以考虑使用一种名为LruCache的东西。 http://developer.android.com/reference/android/util/LruCache.html
使用此工具,您可以确定您的缓存对象(例如位图)将在何时符合垃圾回收条件。因此,如果你想将其设置为4mb(例如),操作系统将尝试超越它时处理它。 (有关实现细节和一个很好的例子,请参阅文档)。
唯一的缺点是那个小宝石只带有3.2,所以你必须在AndroidManifest中制作你的min SDK,或者在运行时以编程方式检查api级别以确定你是否可以使用它。 Pre 3.2我会说你需要在你正在使用的任何位图上调用recycle(),但是如果你已经优化了,我会认为你已经做好了这个机会很好。
这是关于堆和本机内存之间差异的一个很好的小片段。 http://code-gotcha.blogspot.com/2011/09/android-bitmap-heap.html它可能(取决于你在做什么)帮助你理解为什么你没有看到你所期待的记忆力下降。
最后来自SO的帖子在处理堆大小时也应该有所帮助: Detect application heap size in Android
希望有所帮助。