[英]android bitmaps, recycling, and heap fragmentation
我有一個應用程序大量使用從 SD 卡讀取的位圖。 我 99% 確定如果不回收這些應用程序,我的應用程序永遠不會被破壞。 它們都被分配到一個 LRU 緩存(commons-collections)中,當它們從 LRU 緩存中清除時回收它們,我在 onDestroy() 中回收剩余的。
盡管如此,我仍然有問題。 如果我多次啟動/停止/啟動/...我的應用程序,我總是會擺脫 memory 錯誤。
我對此的理論是它必須使用 android 的非壓縮堆。 經過幾次運行后,堆已足夠碎片化,因此盡管有大量可用的 memory,但沒有足夠大的連續塊來加載位圖。 無論如何,這就是理論。
我一直在通過在 onDestroy() (android.os.Process.killProcess()) 中殺死我的進程來“解決”這個問題。 這解決了問題,但引入了它自己的其他問題,因為我有其他需要完成的線程和服務,並且很好地等待所有這些是不切實際的。 更不用說我當然明白這只是一個非常糟糕的做法。
我已閱讀有關此主題的所有帖子等,但我沒有看到一個好的解決方案。 我正在使用 Thumbnails.getThumbnail(),所以我已經在使用縮小版的圖像。 進一步對它們進行二次采樣會導致圖像質量非常差。
我保留了 8 個“迷你”縮略圖和 36 個“微型”縮略圖的緩存,所以我一次只擁有 memory 中的緩存。 這些都應該最多容納幾兆。
任何想法/提示/指針表示贊賞。 我對此束手無策。
你說你在onDestroy()
中回收它們,但也許你應該在onPause()
中回收它們? 我在切換方向時遇到了一些 memory 問題,並且通過在onPause()
中進行回收解決了該問題。
只是一個想法。 不確定這是否能解決您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.