2

我真的是 android 开发的新手,并且创建了一个简单的应用程序,可以从互联网读取一些 rss xml 新闻提要,我有点担心内存管理,因为每次应用程序读取 xml 提要时,都会调用 GC_CONCURRENT,ddms 显示我的堆大小为 12,133Mb,我已分配 11,549Mb(95.15% 的使用率),我没有出现内存错误,我担心,因为应用程序到目前为止只有一个活动,内存使用率几乎是 100%。

我的应用程序在内存使用方面是否健康?

ps:对不起英语不好

04-09 17:02:58.731: D/InicioActivity(8998): Categoria: Mundo
04-09 17:02:58.762: D/dalvikvm(8998): null clazz in OP_INSTANCE_OF, single-stepping
04-09 17:02:59.255: D/dalvikvm(8998): GC_CONCURRENT freed 356K, 5% free 11879K/12423K, paused 3ms+7ms, total 30ms
04-09 17:02:59.458: D/InicioActivity(8998): Categoria: Brasil
04-09 17:02:59.505: D/dalvikvm(8998): GC_CONCURRENT freed 515K, 5% free 11831K/12423K,     paused 12ms+2ms, total 30ms
04-09 17:03:00.106: D/dalvikvm(8998): GC_CONCURRENT freed 465K, 5% free 11804K/12423K, paused 12ms+3ms, total 30ms
04-09 17:03:00.153: D/InicioActivity(8998): Categoria: Negócios
04-09 17:02:59.255: D/dalvikvm(8998): GC_CONCURRENT freed 356K, 5% free 11879K/12423K, paused 3ms+7ms, total 30ms
04-09 17:02:59.458: D/InicioActivity(8998): Categoria: Brasil
04-09 17:02:59.505: D/dalvikvm(8998): GC_CONCURRENT freed 515K, 5% free 11831K/12423K, paused 12ms+2ms, total 30ms
04-09 17:03:00.106: D/dalvikvm(8998): GC_CONCURRENT freed 465K, 5% free 11804K/12423K, paused 12ms+3ms, total 30ms
04-09 17:03:00.153: D/InicioActivity(8998): Categoria: Negócios
4

2 回答 2

1

我以前做过一些 RSS 提要程序。由于我不知道您的代码的确切细节,我假设您实现了一些您在 google 上找到的代码。12 MB 很多,但我几乎不认为这与 rss 提要本身有任何关系,因为在网上找到的大多数代码都写得非常好(如果不是,我真的怀疑它们会通过使用简单的 xml 解析器)。

首先考虑几个方面:

  1. rss 阅读器的正常内存使用量约为 4 MB(至少对于我的每个解析器都是如此)

  2. 检查您的程序源代码,看看您是否有任何其他需要额外内存的代码(浏览器、纹理、图片、图形引擎)

  3. 您尝试解析的 xml 大小是否至少为 1MB ???如果是这样,我建议您找到其他方法来解析它。
  4. 由于您是新来的,我建议您从现在开始在提问时添加一些示例代码。
于 2013-04-09T21:08:50.887 回答
0

这是当前分配的堆的 5%。如果需要,它会增长,直到最大堆大小,之后你会得到OutOfMemoryErrors。

在 XML 解析方面,一般的建议是使用XmlPullParser,因为它是 Android 框架自带的,对内存的要求不高。使用基于事件的解析器(相对于 DOM 解析器)进行解析比较困难,但好处是您不会在内存中保存文档的完整表示。

于 2013-04-09T21:18:33.170 回答