我有一個應用程序,使大量使用從SD卡讀入的位圖。我99%肯定我的應用程序永遠不會被銷燬而無需回收這些。它們全部被分配到一個LRU緩存(commons-collections)中,當它們從LRU緩存中清除時,它們將回收它們,並且我將剩下的onDestroy()回收。安卓位圖,回收和堆碎片
儘管如此,我仍然有問題。如果我開始/停止/開始/ ...我的應用程序多次,我總是失去內存錯誤。
我的理論是,它必須做w/android的非壓縮堆。經過幾次運行後,堆足夠分散,因此雖然有足夠的空閒內存,但沒有足夠大的連續塊來加載位圖。無論如何,這就是理論。
我一直通過在onDestroy()(android.os.Process.killProcess())中殺死我的進程來「解決」這個問題。這解決了這個問題,但是引入了它自己的其他問題,因爲我有其他需要完成的線程和服務,並且等待所有這些都很實用。更何況我當然明白,這只是一個非常糟糕的做法。
我已閱讀所有帖子等在這個話題上,我看不到一個很好的解決方案。我使用的是Thumbnails.getThumbnail(),所以我已經使用縮小版本的圖像。對它們進行二次採樣會進一步導致圖像質量很差。
我保留了8個「迷你」縮略圖和36個「微型」縮略圖的緩存,所以我從來沒有比內存更多的一次。這些應該都在幾乎所有適合幾個megs。
任何想法/技巧/指針表示讚賞。我在這個機智的結尾。
謝謝,這並沒有解決問題,但它似乎是一個很好的做法。我認爲它會導致仍然引用位圖的其他對象出現問題,這似乎並沒有這樣做。 – 2011-06-14 22:00:35