我对Android相对较新,并且一段时间以来一直在开发一个简单的应用程序。该应用程序的所有功能一直在工作,但现在我遇到了java.lang.OutOfMemoryError: [memory exhausted]
错误。
我已经在线阅读了这个错误是如何导致的,但大多数答案都是关于占用过多内存的位图图像。我的应用只使用50dp x 50dp大的图像按钮,所以我不认为这些按钮会导致错误。
我已经使用了DDMS并查看了堆等。下面的图片说明正在使用大量的内存,但是数据对我来说没有任何意义。
为了给你一个大纲我的应用程序基本上是一系列输入表单,数据存储在数据库中。其中一个输入形式是50个字段长,所以问题可能在某处?我正在使用Genymotion模拟器来运行/测试我的应用程序。
如果有人能够突出显示内存被用尽的地方以及如何解决这个问题,我将不胜感激。
提前致谢。
编辑:
Kristy发布的下面的代码帮助确定了错误的位置,从那里我能够发现非常简单的问题cursor.moveToNext
实际上是cursor.moveToFirst
这显然导致光标问题导致了程序耗尽内存。
答案 0 :(得分:0)
如果您从文件中获取位图而不是将它们打包到apk中,则可能会耗尽内存。另一件需要注意的事情是确保您已经关闭了执行数据库调用的游标。这有助于我在super.OnCreate()方法之后立即执行:
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.detectLeakedClosableObjects()
.penaltyLog()
.penaltyDeath()
.build());