2012-10-03 37 views
1

我開始爲我的遊戲獲取OutOfMemoryError。我認爲這是因爲我爲每個動畫創建了新的位圖(因此存在多個相同圖像的位圖),但是我創建了一個ImageLoader類來只加載每個位圖,然後需要圖像的對象只使用一個引用他們。Android位圖OutOfMemoryError +遊戲如何處理大量圖像?

但是,在我的遊戲中有很多圖像用於動畫,背景,物品等。我只是添加了幾個項目,現在我不斷收到錯誤。

其他遊戲如何處理有很多圖像?我相信很多其他遊戲的圖像比我的要多,並且仍然可以避免這個錯誤。

是否有不同的/更好的方式來實現一個ImageLoader比我一直在做?

非常感謝,夥計們!

+0

這個問題更可能是您的ImageLoader比您的圖片數量。我會說你的ImageLoader代碼。 – Vulcan

回答

2

遊戲開發者通過花費大量時間優化圖像大小並利用內存緩存來解決此問題。

重要的是要知道您的應用程序必須使用多少內存,並且不得超過。您可以設置一個LRU(最近最少使用)緩存,以確保您的位圖的總內存空間保持在一定的大小。您只需將位圖插入緩存中,一旦緩存達到其允許的最大大小(您指定的大小),它將開始卸載一段時間內未使用的位圖。

安卓文檔中的this article中有一些非常好的信息,包括代碼片段。

+0

謝謝!但是我現在加載的所有位圖都是需要的,因爲我正在使用它們進行我的精靈動畫(隨機彈出屏幕)。 =/ –

+0

啊,好的。在這種情況下,它可能會有幫助(設置緩存後),以檢查ADT中的Allocation Tracker([某些解釋](http://android-developers.blogspot.com/2011/03/memory-analysis-換android.html))。可能有一些視圖/佈局使用的內存比預期的多。還有另一種選擇是[縮小你的位圖](http://stackoverflow.com/questions/10081008/outofmemoryerror-in-game-with-many-small-images),但那會帶來質量損失。祝你好運! – acj