2013-04-09 51 views
2

我真的很新的android开发,并创建了一个简单的应用程序,从互联网上读取一些rss xml新闻提要,我有点关心内存管理,因为每次该应用程序读取一个XML feed时调用GC_CONCURRENT,ddms显示我的堆大小为12,133Mb,我分配了11,549Mb(使用率为95.15%),我没有发现内存错误,我很担心,因为该应用只有一项活动,内存使用率几乎达到100%。Android内存管理 - 我的应用程序是否健康?

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

P.S:遗憾的英语不好

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 

回答

1

我之前做了一些RSS提要的程序。由于我不知道你的代码的确切细节,我会假设你实现了你在谷歌上找到的一些代码。 12 MB是很多,但我几乎认为这与rss feed本身没有任何关系,因为大多数在线发现的代码写得非常好(如果不是,我真的怀疑他们会增加你的内存到12mb只是通过使用一个简单的XML解析器)。

首先采取了一些东西考虑:

一个RSS阅读器
  1. 正常的内存使用量将约为4 MB(至少这是我的解析器的每一个)

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

  3. 是你试图分析至少1MB大小的XML?如果是这样,我会建议你找一些其他方法来解析它。
  4. 由于您是新手,因此我会建议您在提问时添加一些示例代码。
0

这是5%免费的当前分配的堆。它会根据需要增长,直到达到最大堆大小,之后您将获得OutOfMemoryError s。

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