我有一个启动已启动服务的应用程序,使用Manager类(将所有必要的数据从SQLITE加载到这些单例类中)。 DDMS显示我的应用程序的堆大小为7.00 MB,而我的应用程序消耗是5.80 MB的堆大小。仅剩1.20 MB左右。这是我的应用程序没有太多数据的时候。 怎么打反击这样的问题???请帮忙!
答案 0 :(得分:3)
如果你不知道如何在你的应用程序中使用堆。在DDMS中使用内存分析器来查找它。它是一个可以集成到eclipse的插件。它将显示哪个进程需要更多堆,您可以跟踪它并纠正。
如果未清除未使用的位图,垃圾收集器将不会清除这些内存,并且在运行时将占用大量堆。
当您不清除媒体播放器,刻录机,位图和视频处理器的未使用对象时,堆真的会被烧毁。
我不知道你应用的确切功能是什么。如果您在应用中使用过,请检查这些组件中的任何一个。我想这可能是堆内存概念的原因。尝试通过将所有未使用的对象设为null来清除它们。
答案 1 :(得分:1)
有两种解决方案:要么尝试减少内存使用量,修剪一些加载到管理器类的数据并在必要时加载它们,要么如果你确定你的应用程序将使用比普通android进程更多的内存,你可以使用largeHeap标记来指定此内容。
话虽这么说,您在DDMS中看到的数字并不是RAM OS分配给您的流程的最终数量。这是初始堆,经过一段时间后,如果需要,OS会为您的进程分配更多堆。但是有一个上限,在不同的手机上有所不同。