私はアンドロイドのアプリでグリッドビューを持っています。私はサーバからグリッドビューにイメージをロードしています。遅延読み込みを使用しています。ここで作成されたすべてのビットマップをリサイクルする必要があります.AdapterまたはGridビューでBitmap.recycle()を実行する方法。私は記憶がなくなり、助けてください。グリッドビューアダプタでビットマップをリサイクルする方法は?
答えて
コードを表示する必要があります(アダプターは最低限必要です)。メモリエラーが発生している場合は、ビューのリサイクルを正しく実装していないか、メモリリークが発生している可能性があります。一度にたくさんの大きなビットマップをロードするだけでも可能ですが、ビューをロードすることができれば、メモリリークが発生する可能性が非常に高くなります。
誰かがコードを見ずにメモリリークを追跡することはできません。 Bitmap.recycle()は解決策ではありません。ガベージコレクタはコードの残りの部分が正常であれば十分に機能します。
参照:http://www.youtube.com/watch?v=_CruQY55HOkアンドロイドのメモリ管理とメモリリークの発見に関する素晴らしい話は、http://www.youtube.com/watch?v=_CruQY55HOkをご覧ください。
http://android-developers.blogspot.com/2010/07/multithreading-for-performance.htmlまた、画像をビューのようなリストにダウンロードしたり正しく非同期に読み込んだりする方法の例については、試してみてください。
編集:また、私が書いたイメージロードライブラリをチェックアウトするので、あなたは、このいずれかを心配する必要はありません。https://github.com/bumptech/glide
Displaying Bitmaps Efficiently Androidのトレーニングクラスをご覧ください。バックグラウンドスレッドとメモリとディスクキャッシュを使用してGridViewにビットマップを表示することをカバーするレッスンDisplaying Bitmaps in your UIを持っています。非常にうまく機能本当に簡単な方法はあり
:ビットマップへのポインタを維持し、古いものをリサイクル
public class ImageViewRecyclable extends ImageView
{
private Bitmap bitmap;
public ImageViewRecyclable(Context context)
{
super(context);
}
@Override
public void setImageBitmap(Bitmap bm)
{
super.setImageBitmap(bm);
if (bitmap != null) bitmap.recycle();
this.bitmap = bm;
}
}
当社ImageViewRecyclable:
まず、あなたは、このようなカスタムImageViewのを作成する必要があります新しいものを設定する前に。
第2に、convertViewがnullかどうかを確認するには、アダプタのgetViewをチェックインする必要があります。カスタムのImageViewRecyclableにnullがキャストされていない場合は、その上にビットマップを設定します。この方法で古いビットマップをリサイクルしてから新しいビットマップを設定します。
これは、アダプタのgetViewメソッドのコードです:
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
ImageViewRecyclable imageView = (convertView == null) ? new ImageViewRecyclable(ActivityMain.this) : (ImageViewRecyclable) convertView;
byte[] bytes = ....
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
imageView.setImageBitmap(bitmap);
return imageView;
}
私が1000枚の100x100の画像でこのコードをテストしました。元のImageViewはメモリエラーで50のイメージを表示した後に失敗しましたが、このコードはグリッドの最後までうまく動作します。
このコードは、小さなオフライン画像では非常に効果的ですが、オンラインや大きな画像にはキャッシングなどが必要です。これは便利ですが、いくつかの変更を適用する必要があります。
- 1. ANDROID:ヘルプ、outofmemoryビットマップが予算サイズを超えています。リサイクル方法は?
- 2. AndroidビューのSimpleCursorAdapterで、ギャラリービューでビットマップをリサイクルすることはできますか?
- 3. AutoItでビットマップをトリミングする方法は?
- 4. 別のリサイクルビューアダプターでアダプターをリサイクルする方法は?
- 5. ビットマップをオーバーレイする方法
- 6. Android:ビットマップをシフトする方法は?
- 7. actionscript3:ビットマップをスムーズにする方法は?
- 8. relativelayout.setBackgroundDrawable()をビットマップで使用する方法?
- 9. ビットマップをプログラムで作成する方法
- 10. ビットマップを線で分割する方法
- 11. Crystal Reportsデータセットをリサイクルする方法はありますか?
- 12. リサイクル()、リサイクル()
- 13. SqlDataSourceオブジェクトのデータをリサイクルする方法は?
- 14. Android RecyclerViewをScrollView内でリサイクルする方法
- 15. ビットマップをリサイクルしてもメモリ使用量は減少しません
- 16. Linuxでは、テキストをビットマップに描画する方法は?
- 17. IPV6ノードのグローバルアドレスをRA(ルータアドバタイズメント)でリサイクル(またはフラッシュ)する方法は?
- 18. フラグメント内のビットマップを正しくリサイクルするにはどうしたらいいですか?
- 19. androidの圧縮方法を使わないでビットマップにビットマップを変換する
- 20. ビットマップをメモリに保持する方法
- 21. スクリーンメモリのビットマップをスクロールする方法
- 22. ビットマップをアンドロイドギャラリーに保存する方法
- 23. ビットマップSharpDXを変換する方法
- 24. ビットマップにアルファチャンネルを追加する方法
- 25. ビットマップをHashMapに挿入する方法
- 26. キャンバスをビットマップにコピーする方法
- 27. 壁紙のビットマップをトリミングする方法
- 28. キャンバス:リサイクルされたビットマップを使用しようとしています。
- 29. SurfaceViewでビットマップをタッチ位置に移動する方法は?
- 30. RGB_565でビットマップを作成する方法は?