2013-04-09 95 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解析器)進行解析比較困難,但好處是您不能在內存中保存文檔的完整表示。