In:Androidでビットマップを適切なサイズでデコードする-ビットマップをサンプリングすると、メモリエラーが発生する可能性があると投稿されています。
この問題は、Androidの新しいバージョンでも引き続き有効ですか?
これは、サンプリングする前に、Androidがフルサイズのビットマップをメモリにロードする必要があることを意味しますか?画像処理はネイティブコードで実装されているため、これはネイティブメモリを使用していると思います。
In:Androidでビットマップを適切なサイズでデコードする-ビットマップをサンプリングすると、メモリエラーが発生する可能性があると投稿されています。
この問題は、Androidの新しいバージョンでも引き続き有効ですか?
これは、サンプリングする前に、Androidがフルサイズのビットマップをメモリにロードする必要があることを意味しますか?画像処理はネイティブコードで実装されているため、これはネイティブメモリを使用していると思います。
新しいバージョンでは物理メモリが増える可能性がありますが、それでもシステムスタックサイズに制限されます。そうすれば、ビットマップのプログラミングは、使用するメモリの量に応じて非常に慎重に行う必要があります。
今年のGoogleI/ O(2012)には、「少ないコストでより多くのことを行う」という素晴らしいプレゼンテーションがあり、調査する必要のある非常に優れたキャッシュ手法がいくつか示されています。このビデオはYouTubeAndroidDevelopersアカウントで見つけることができると確信しています。
ビデオが見つかりました:http ://www.youtube.com/watch?v = gbQb1PVjfqM
使用可能なメモリ量を取得する方法は次のとおりです。
Runtime.getRuntime().maxMemory()
ここにメモリに関する興味深いブログがあります: http://codelog.dexetra.com/getting-around-android-memory-blues
Android の問題は、いつメモリ不足になり、アプリがクラッシュするか分からないことです。そのため、大きすぎるバイマップをロードしないようにする必要があります (通常、画面の向きに応じて最大 800 /600 またはそのようなものを使用します...)。
ギャラリーや他のビュー グループのように複数のビットマップを読み込む場合は、弱参照を使用する必要があります:
http://developer.android.com/reference/java/lang/ref/WeakReference.html
また、リンクの例を見ると、スケーリングは最初に境界のみをデコードし、次に使用するスケールを決定します。
ビットマップが不要になったら、次のように呼び出します。
bitmap.recycle();