2013-11-21 49 views
1

我只是有一點點ListView包含所有已安裝的應用程序及其圖標
但如果安裝了太多的應用程序我碰到outOfMemoryErrors而做安卓loadIcon產生的OutOfMemoryError

Drawable app_icon = applicationInfoList.get(i).loadIcon(context.getPackageManager())); 

,每ListEntry(這條線被寫在我的ListAdapter

沒有問題的,到目前爲止,我明白了爲什麼我遇到了這個錯誤(太多圖標加載,過少的VM堆)
但我一看源碼ManageApplications活動在設置
和我同時使用設置ManageApps
但奇怪的是,他們這樣做完全相同的方式在任何的OOM錯誤永遠不會運行機器人電子代碼

,你可以在這裏他們的源代碼看到:
the ManageApplications activity
where the Drawable icon gets loaded
where it is set in the list view

但我真的不明白爲什麼我得到一個OOM,他們不?

+0

緊急,你解決了嗎? – thecr0w

+0

我已經創建了一個現在可以解決它的'LruCache'。 – bricklore

+0

好的,謝謝你的信息。 – thecr0w

回答

1

自己解決了。
我現在將每個圖像加載到緩存中,然後再使用它。
如果緩存滿了,最舊的元素將被丟棄,
因此新緩存可以被緩存。 另外im正在調整我的圖像到更小的圖標。
做到了。

+3

恭喜,請分享您的代碼?這與Google的BitmapFun Demo類似嗎? – thecr0w

+0

這很好,你解決了它,但如果你已經決定保持這個問題,至少分享解決方案。 – SagiLow

+0

@SagiLow所以我沒有那樣做?請重新閱讀我的答案。我已經告訴過你我做過的每一件事:避免問題 – bricklore

1

將您的圖標調整爲小圖像,你會沒事的! (之前也有這個問題)

+0

但它不在ManageApplications Activity中完成 - 那麼我的代碼和他們的代碼之間的區別在哪裏? – bricklore