2011-02-28 27 views
1

我正在構建一個應用程序,從服務器獲取XML,然後解析它(它的DIDL格式在地方)。目標是儘可能多地加載到內存中,以方便用戶瀏覽(以便快速滾動結果),但我一直在獲取OutOfMemoryError。我對Android很陌生,看起來虛擬機真的很挑剔。我加載的不超過一兆字節的XML,並且幾乎立即丟棄它。我應該怎麼做才能防止這些錯誤發生?Android的OutOfMemoryError與XML

我是否應該通過網絡加載文件塊,將其寫入磁盤,然後將塊加載回內存並將其解析爲內存,將所有內容解析爲POJO?如果可以避免的話,我不想實現某種形式的分頁,就像Twitter應用程序一樣(當你點擊底部時它用來加載更多的條目,它現在一次加載很多,並且同樣崩潰一個OOM錯誤。)如果有幫助,我正在運行Nexus One,CM7/Android 2.3.3。

回答

2

你可以閱讀這個不錯的article關於Android上的XML解析。使用pull語法分析器對你來說是很好的選擇,因爲它不需要將完整的文檔讀入內存,這是你的情況。我建議將解析後的結果存儲到數據庫中,因爲一旦它們在那裏,您可以快速列出它們並以任何您想要的方式將它們分頁,並且數據庫的性能非常好。這樣,您只需要將完整的數據從服務器加載到數據庫一次(如果服務器上的數據沒有更改),或者加載一次,然後在更新時不時更新(例如推特)。

+0

這很有道理。我想我會研究這個。我正在使用一個API來處理所有這些東西(解析,加載到內存等),所以我將不得不將其全部解決,並弄清楚如何爲我推出自己的HTTP請求並解析我的自己的結果,但是,這是一個好的開始。它也肯定會提高應用程序的性能,並逐個解析元素並將它們添加到列表中。 – 2011-02-28 21:55:31

1

將所有對象聲明移出循環,並在使用後將它們取消。並經常使用System.gc()(相信我,它的工作原理)。儘可能少地使用類級對象。執行您的應用程序並繼續關注Logcat日誌。