2012-04-21 4 views
2

ハニカムの前に、ビットマップobejectはネイティブヒープ メモリスペース(mallocを使用)のポインタに過ぎず、私はそのネイティブメモリを.recycle()呼び出してきれいにすることができました。ハニカムの後、ビットマップ用のメモリはgc呼び出しを取得するアプリケーションヒープに割り当てられます。ビットマップメモリ​​リーク

私の質問は、私のアプリが2.2+をサポートする必要があるので、どうすればよいですか?バージョンと電話番号を確認しますか?リサイクルをしないでください。あなたのアドバイスは何ですか?ビットマップインスタンスを保持するBitmapCacheを持っているので、それらを永遠にメモリに残したくないからです。

答えて

3

いずれかのアンドロイドバージョンでは、それはfroyo、ジンジャーブレッドまたはハニカムかどうか。あなたは自分でメモリ管理をチェックする必要があります。はい、2.2以上では、アプリケーションをsdcardから調整できますが、ヒープメモリにビットマップを保持すると、どちらのバージョンを使用するかは常に問題となります。あなたが純粋なビットマップを使いたいなら、なぜあなたは道に従わないのですか?このリンクを試してみてください。彼らはビットマップを効率的に管理するための多くの方法を与えてくれました。このリンクをクリックしてください: Displaying bitmaps efficiently

0

まず、任意のAndroidプラットフォームのバージョンのように:アンドロイド2.2、またはアンドロイド3.0、またはアンドロイド3.0よりも高く、あなたが、あなたはまた、android >=3.0もののbitmap.recycle()

呼び出す必要があります使用したくないビットマップビットマップはdalvikヒープに保存され、ネイティブヒープは保存されません。ので、オブジェクトを参照するいくつかの参照を持っている場合はJavaヒープとして、オブジェクトはgcシステムではできません、ビットマップメモリ​​は、オブジェクト参照カウンタがゼロであることを確認しない場合は、ビットマップメモリ​​は、問題。

あなたはビットマップを保存するためにWeakReferenceまたはSoftReferenceを使用し、ビットマップを返すようにWeakReference.get()SoftReference.get()を使用している場合、bitmap参照は、システムの制御権であるので、ビットマップを保存することができたビットマップキャッシュ。それ以外の場合は、自分で管理する必要があります。

+0

私は弱い参照を持っている場合は、GCは、右私のためにそれの世話をするのだろうか?私の実装では、以前のバージョンのリサイクル()を呼び出す必要がありますか?そのリサイクルはいつ呼びなければなりませんか?なぜこのチュートリアルでは、http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html彼らはSoftとWeek Referencesを使用することは推奨されないと言いましたか? –

+0

ビットマップを終了するときはいつでも、バージョンに関係なくrecycle()を呼び出してから、nullに設定する必要があります。それはあなたがいつ呼び出すべきかについてあなたがしたいことに依存します。 ビットマップを削除して新しいものを作成するのではなく、ビットマップを再利用する傾向があります。 –

0

あなたはdeveloper pagesに気づくと彼らは弱いreferenciesが古いソリューションであることを言った..私はここで左のリンクから、すべてのビットマップの参照チュートリアルをチェックして、scaling down(可能な場合)を使用しようと、キャッシングとAsyncTaskだけでなく、lazy bitmap loading from this example ..

ソリューションとなります組み合わせ

これらの事は、私はかなり確信しています。..ところで

..私はちょうど弱参照はOKですが、完璧ではない解決策と私は私のアプリを作りたい引き起こし、あまりにもこのトピックには現在午前lag- AndroidOSの将来のバージョンの証明です。

はそれがあまりにも多くのリンクはありません願っていますが、我々はそれを得るとき、それは魅力のように動作します。)そう

乾杯