簡體   English   中英

android 位圖、回收和堆碎片

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM