java.lang.OutOfMemoryError: [memory exhausted], No Bitmaps

java.lang.OutOfMemoryError: [memory exhausted], No Bitmaps

我是 Android 的新手,开发一个简单的应用程序已有一段时间了。该应用程序的所有功能都可以正常工作,但现在我遇到了 java.lang.OutOfMemoryError: [memory exhausted] 错误。

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

我已经使用了 DDMS 并查看了堆等。下图说明正在使用大量内存,但是关于如何使用的数据对我来说毫无意义。

Screenshot of DDMS log

给你一个大纲,我的应用程序基本上是一系列输入表单,数据存储在数据库中。其中一个输入表单有 50 个字段,所以问题可能出在某个地方?我正在使用 Genymotion 模拟器 run/test 我的应用程序。

如果有人能指出内存用完的地方以及如何解决这个问题,我将不胜感激。

提前致谢。

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

如果您从文件中获取位图而不是将它们打包到 apk 中,您可能 运行 内存不足。另一件要看的事情是确保您已经关闭了执行数据库调用的游标。这帮助我把它放在 super.OnCreate() 方法之后:

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