0

メモリの解放に問題があります。をHashmap追加しているBitmapがあり、ビットマップの数が非常に多いです。このため、私は取得してOutOfMemoryErrorいます。そのため、メモリ クランチまたはシステムのヒープ メモリが少なくなったときに、Bitmap最も使用されていないものをリリースすることにしました。Collection

現在使用可能なメモリを取得するために、「ActivityManager.MemoryInfo.availMem」を使用しましたが、使用可能なヒープ メモリではなく、合計 RAM サイズのメモリが得られます。そして、コレクションからビットマップを解放すると、このメモリが更新されないことがわかりました。

次に、次の 3 つの方法を使用しました。

Debug.getNativeHeapAllocatedSize()
Debug.getNativeHeapFreeSize()
Debug.getNativeHeapSize()

しかし、NativeHeapSize が特定のレベル (たとえば 16 MB) まで増加し続け、その後変化することがわかりましたOutOfMemoryError。これも、から解放してもNativeHeapAllocatedSizeとが減っていないことがわかりました。getNativeHeapSizeBitmapCollection

この問題を解決するにはどうすればよいですか?

私の問題は、現在使用可能なメモリがしきい値メモリを超えた場合にBitmap、コレクションから一部を解放し、ガベージ コレクションがメモリを再利用して、メモリを生成せずに解放するように、割り当てられた使用可能な最大アプリケーション メモリと現在使用可能なメモリを計算したいことです。エラー。

4

1 に答える 1

0

メモリへの保存Bitmapsは非常に高価です。画像形式に応じて、各ピクセルは最大4バイトのメモリを消費する可能性があります。

全体CollectionBitmaps同時に表示していますか?そうでない場合は、保存して表示されていないものを保存BitmapsするのではなくURI、画像のを保存して、必要なときにオンザフライでロードすることを強くお勧めします。

コレクション全体を表示している場合は、レンダリングされていないピクセルを保存しないように、ビットマップを適切なサイズにダウンサンプリングしていることを確認します。

于 2012-04-25T16:08:23.070 に答える