2012-04-25 11 views
0

メモリを解放する際に問題があります。私はBitmapを追加しているHashmapを持っており、ビットマップの数はかなり多いです。このため、私はOutOfMemoryErrorを取得しています。だから私はBitmapを少なくともCollectionから使用することを決めました。メモリのクランチやシステムのヒープメモリが少なくなっています。メモリ管理ロジックの合計使用可能メモリ

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

は、その後、私はこれらの3つのメソッドを使用しています

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

が、私はNativeHeapSizeは、いくつかの特定のレベルにまで高めることになった、OutOfMemoryErrorが発生していることの後に変更、16  メガバイトを言います。この中でも、私はNativeHeapAllocatedSizegetNativeHeapSizeCollectionからBitmapを解放するには減少していないことがわかりました。

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

私の問題は、現在使用可能なメモリが閾値メモリを超えた場合、私はコレクションからいくつかのBitmapをリリースする予定とgarbage collectionがメモリを再利用して自由になるよう、私は最大の利用可能なアプリケーションの割り当てられたメモリと、現在使用可能なメモリを計算したいですエラーは発生しません。メモリ内

+1

あなたはこれを見てみたいかもしれません。http://developer.android.com/training/displaying-bitmaps/index.html – Michaeldcooney

答えて

0

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

あなたは同時にBitmapsの全体Collectionを表示していますか?そうでない場合は、店舗でないことを強くお勧めします。は、非表示のBitmapsを保存する代わりに、画像のためにURIを保存し、必要なときにすぐにロードしてください。

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

+0

はい、私はこれらのビットマップを頻繁に使用していますが、すべてではなく、彼がアプリケーションで連続的にトラバースして、ほとんどのビットマップを使用し、これらのビットマップはサーバーからロードされます。これらのビットマップユーザーがこれらのイメージを再度読み込むのを待たなければなりません。他の方法があるか、間違った方法で行っていると私を助けてください。 –

+0

イメージをローカルファイルに保存して、サーバーから一度だけロードするようにしてください。ローカルファイルから画像を読み込んで表示することは非常に高速です! – slayton

+0

はい、私はあなたの提案をしますが、私たちはアプリでActualMemoryAvailableとTotalMemoryAvailabeを持っていませんか? –