【问题标题】:Process uses large amount of memory进程占用大量内存
【发布时间】:2011-10-13 00:34:18
【问题描述】:

我正在构建一个 Android 应用程序,它使用 SAX 解析一个相当大的 XML 文件(大约 500 个项目),然后通过自定义适配器将其渲染到 ListView。我将 XML 解析为我创建的列表,然后将列表对象传递给我的自定义适配器(并非所有 500 个项目都添加到列表中,通常大约 50 个左右)。

一切正常,该应用在我的 Nexus One 上似乎反应灵敏,但是当我在“设置”中查看该应用时,在“运行”->“显示缓存的进程”下,该进程可以使用 40MB-70MB 的内存。不确定我是否在某处发生了内存泄漏,或者这意味着什么,但对我来说似乎很高。

【问题讨论】:

标签: android memory-leaks


【解决方案1】:

即使有 500 个项目,除非您的 XML 非常冗余,或者除非每个项目都很大,否则您在文件方面应该没问题。

您可以做的是检查在 DDMS 中进行分配的内容(从 Eclipse:打开 DDMS 透视图 => 在您的设备下方的列表中单击您的应用程序名称 => 分配跟踪器选项卡 => 开始跟踪 => 在之后获取分配您的列表呈现)。

更多关于您运行哪种应用程序可能会有所帮助的信息。

【讨论】:

  • 谢谢,我会试着看看分配。该应用程序基本上是一个 RSS 阅读器。就像我提到的,它解析一个非常大的 RSS 提要(1.32MB 文件大小)并对其进行一些过滤并显示一个包含 20-100 个项目的 ListView。
  • 我运行了 Eclipse 分配跟踪器。我不确定如何阅读它。我到底在寻找什么表明内存泄漏?
  • 内存泄漏基本上看起来像从同一个函数发生的相同分配并且没有被删除(垃圾收集)。如果垃圾收集器一直在运行,则意味着您的代码分配了太多。如果你的垃圾收集器没有运行并且你的堆大小正在增长,那么你就有了泄漏。运行 4 次左右的测试,看看是否有任何重复发生的分配发生。如果您看到相同的函数进行相同的分配并且没有收集垃圾,那么您就是在泄漏。
  • 明白了。感谢您的回复!
猜你喜欢
  • 1970-01-01
  • 2013-12-29
  • 2017-04-13
  • 2014-05-11
  • 2011-02-27
  • 2013-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多