我有一個列表視圖,其中可能包含15行。每行(列表項)包含2個文本字段。爲什麼滾動listview增加內存使用量很多?
當我第一次創建列表視圖時,幾乎沒有內存使用情況,但現在我觸摸它滾動,內存使用增加了〜2 MB。
這往往會使GC運行,這使得滾動非常不連貫。
我重複使用視圖,所以這不可能。有任何想法嗎?
我有一個列表視圖,其中可能包含15行。每行(列表項)包含2個文本字段。爲什麼滾動listview增加內存使用量很多?
當我第一次創建列表視圖時,幾乎沒有內存使用情況,但現在我觸摸它滾動,內存使用增加了〜2 MB。
這往往會使GC運行,這使得滾動非常不連貫。
我重複使用視圖,所以這不可能。有任何想法嗎?
如果您啓用了drawingCache(默認情況下),則每個子視圖在滾動期間都會呈現爲位圖。這會增加內存使用量,但不應與您體驗的不穩定性有關。 你是否在bindView/getView方法中做了任何額外的步驟(比如分配位圖)?
這的確是原因。這導致了不穩定的原因是因爲該應用程序接近堆限制並且不得不做很多GC調查。但請注意,這只是在仿真器上,尚未在真實設備上進行測試。 我猜測,關閉緩存可能意味着交易內存使用的CPU週期,但只有在ListView中使用文本纔會真正有意義嗎? – eriknn 2012-04-13 08:00:50
我認爲簡單地將位圖爆炸到表面上總是比渲染視圖更快,即使它只是一個簡單的TextView。我認爲,如果你渲染一個TextView,那麼系統仍然需要將盡可能多的像素放到表面上,就像將位圖複製到該表面上一樣。此外,您還有textviews渲染邏輯和文本柵格化的開銷。把它們加起來。我認爲內存開銷非常值得,而且我從來沒有在任何真實設備上遇到問題。 – Renard 2012-04-13 09:17:01
我的猜測是,這是因爲scrollview緩存了你已經查看過的項目(因爲你不需要在下一次訪問時再次獲取它們)。不知道有什麼來控制這一點。 – kosa 2012-04-11 16:08:22
您應該發佈適配器代碼。也許有什麼關係。 – dmon 2012-04-11 16:29:53