2010-01-15 87 views
4

我正在研究Android的應用程序,因爲我們有很多圖形,我們使用大量的內存。android以外的堆內存管理

當我做一些需要更多內存(然後回到3)的內容時,我監視內存堆大小和其大約3-4 Mb,以及5Mb的窺視。這不是什麼大不了的事情,但其他一些東西是在堆內存之外處理的,比如加載drawables。

例如,如果我在eclipse外部運行ddms工具並轉到sysinfo,我發現我的應用程序在Droid上佔用了20Mb,在G1上佔用了12M,但堆大小在兩者上都是相同的,因爲數據是相同但圖像不同。

所以問題是: 如何知道堆內存以外的內存是什麼? 其他的東西需要堆內存以外的內存?複雜的佈局(大樹)?動畫?

感謝

丹尼爾

回答

4

位圖對象佔用相當多的內存

Ex。如果您的應用程序從網上下載10KB jpg並使用BitmapFactory將其解碼爲位圖對象需要大約30-100KB內存的位圖,具體取決於圖像的分辨率。每個像素3bytes(每種顏色1個字節)

是的,所有類型的對象都使用內存,如LinearLayouts,ImageViews等等......如果您正在創建和銷燬許多這些對象,當您滾動/翻閱圖片時,會出現內存泄漏。 gc()不會像我們希望的那樣快速處理所謂的短暫對象。 *保持視圖對象的數量在一個穩定的水平**,並且回收它們而不是銷燬和創建新的視圖對象。

REF:http://developer.android.com/resources/articles/track-mem.html

如果您的應用程序達到20MB內存,它可能因BitmapFactory試圖下一個圖像解碼FC。

2

一個顯而易見的候選偏離航線離屏位圖(由Android雙緩衝?),因爲屏幕尺寸有〜4倍的機器人儘可能多的像素。

+0

謝謝,我正在尋找一種方法來跟蹤堆外的內存。 – 2010-02-05 11:17:31