2011-10-13 77 views
0

我正在構建一個Android應用程序,它使用SAX解析一個相當大的XML文件(大約500個項目),然後通過自定義適配器將其呈現給ListView。我將XML解析爲我創建的列表,然後將List對象傳遞給我的自定義適配器(並非所有500個項目都添加到列表中,通常約爲50個左右)。進程使用大量內存

一切工作正常,應用程序似乎對我的Nexus One非常敏感,但是當我在設置中查看應用程序時,在運行 - >「顯示緩存的進程」下,該進程可以使用40MB-70MB的內存。不知道是否在某處存在內存泄漏,或者這意味着什麼,但對我來說似乎很高。

+0

xml文件的大小是多少? – Caner

+0

配置和尋找內存泄漏的最佳方式是使用Android Tool和MAT(http://www.eclipse.org/mat/)中的堆轉儲。這裏有一個額外的博客文章關於此:http://kohlerm.blogspot.com/2009/04/analyzing-memory-usage-off-your-android.html – xandy

+0

約1.32MB文件大小 –

回答

0

即使在500個項目中,除非您的XML非常冗餘,或者除非每個項目都很大,否則應該在事物的文件方面做得很好。你可以做什麼,你可以檢查什麼使DDMS內分配(從Eclipse:打開DDMS的角度=>在您的設備下的列表中單擊您的應用程序名稱=>分配跟蹤器選項卡=>開始跟蹤=>獲得分配列表呈現後)。

有關運行哪種應用的信息可能會有所幫助。

+0

謝謝,我會試着看分配。該應用程序基本上是一個RSS閱讀器。就像我之前提到的,它解析一個相當大的RSS提要(1.32MB文件大小),並對其進行一些篩選並顯示一個包含20-100項的ListView。 –

+0

我運行了eclipse分配跟蹤器。我不確定如何閱讀它。我究竟在尋找什麼會表明內存泄漏? –

+0

內存泄漏基本上看起來像是從同一個函數發生的同樣的分配,並且沒有被刪除(垃圾收集)。如果垃圾收集器不斷運行,這意味着您的代碼會分配太多分配。如果你的垃圾收集器沒有運行,堆的大小越來越大,你就有泄漏。運行4次左右的測試,看看是否有任何重新發生的分配發生。如果你看到相同的功能使得相同的分配和沒有垃圾正在收集,那麼你正在泄漏。 – ntkachov