java.lang.OutOfMemoryError:[内存耗尽],无位图

时间:2015-12-21 22:47:59

标签: android out-of-memory android-bitmap

我对Android相对较新,并且一段时间以来一直在开发一个简单的应用程序。该应用程序的所有功能一直在工作,但现在我遇到了java.lang.OutOfMemoryError: [memory exhausted]错误。

我已经在线阅读了这个错误是如何导致的,但大多数答案都是关于占用过多内存的位图图像。我的应用只使用50dp x 50dp大的图像按钮,所以我不认为这些按钮会导致错误。

我已经使用了DDMS并查看了堆等。下面的图片说明正在使用大量的内存,但是数据对我来说没有任何意义。

Screenshot of DDMS log

为了给你一个大纲我的应用程序基本上是一系列输入表单,数据存储在数据库中。其中一个输入形式是50个字段长,所以问题可能在某处?我正在使用Genymotion模拟器来运行/测试我的应用程序。

如果有人能够突出显示内存被用尽的地方以及如何解决这个问题,我将不胜感激。

提前致谢。

编辑: Kristy发布的下面的代码帮助确定了错误的位置,从那里我能够发现非常简单的问题cursor.moveToNext实际上是cursor.moveToFirst这显然导致光标问题导致了程序耗尽内存。

1 个答案:

答案 0 :(得分:0)

如果您从文件中获取位图而不是将它们打包到apk中,则可能会耗尽内存。另一件需要注意的事情是确保您已经关闭了执行数据库调用的游标。这有助于我在super.OnCreate()方法之后立即执行:

        StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
            .detectLeakedSqlLiteObjects()
            .detectLeakedClosableObjects()
            .penaltyLog()
            .penaltyDeath()
            .build());