VM bugetエラーを超えるビットマップの処理方法をお手伝いできます。実際、私はリストビューにもっと多くの画像を表示していました。それは正常に動作し、ビットマップエラーをスローされた後、アクティビティの開始を繰り返す、任意の答えは心から感謝しています。ビットマップサイズを処理する方法がandroidのエラーを超えています
答えて
public enum BitmapLoading { INSTANCE;
private final Map<String, SoftReference<Bitmap>> cache;
private final ExecutorService pool;
private Map<ImageView, String> imageViews = Collections.synchronizedMap(new WeakHashMap<ImageView, String>());
private Bitmap placeholder;
BitmapLoading() {
cache = new HashMap<String, SoftReference<Bitmap>>();
pool = Executors.newFixedThreadPool(5);
}
public void setPlaceholder(Bitmap bmp) {
try {
placeholder = bmp;
} catch (OutOfMemoryError e) {
placeholder.recycle();
bmp.recycle();
placeholder = null;
bmp = null;
}
}
public Bitmap getBitmapFromCache(String url) {
if (cache.containsKey(url)) {
return cache.get(url).get();
}
return null;
}
public void queueJob(final String url, final ImageView imageView,final int width, final int height) {
/* Create handler in UI thread. */
final Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
String tag = imageViews.get(imageView);
if (tag != null && tag.equals(url)) {
if (msg.obj != null) {
imageView.setImageBitmap((Bitmap) msg.obj);
} else {
imageView.setImageBitmap(placeholder);
Log.d(null, "fail " + url);
}
}
}
};
pool.submit(new Runnable() {
@Override
public void run() {
Bitmap bmp = null;
try{
bmp = downloadBitmap(url, width, height);
Message message = Message.obtain();
message.obj = bmp;
handler.sendMessage(message);
}catch (OutOfMemoryError e) {
bmp.recycle();
bmp = null;
}
}
});
}
public void loadBitmap(final String url, final ImageView imageView,final int width, final int height) {
imageViews.put(imageView, url);
Bitmap bitmap = null ;
try {
bitmap = getBitmapFromCache(url);
if (bitmap != null) {
imageView.setImageBitmap(bitmap);
} else {
imageView.setImageBitmap(placeholder);
queueJob(url, imageView, width, height);
}
} catch (OutOfMemoryError e) {
bitmap.recycle();
bitmap = null;
System.gc();
}
}
private Bitmap downloadBitmap(String url, int width, int height) {
Bitmap bitmap =null;
try {
bitmap = BitmapFactory.decodeStream((InputStream) new URL(url).getContent());
bitmap = Bitmap.createScaledBitmap(bitmap, width, height, true);
cache.put(url, new SoftReference<Bitmap>(bitmap));
return bitmap;
}catch (OutOfMemoryError e) {
bitmap.recycle();
bitmap = null;
System.gc();
}
catch (MalformedURLException e) {
} catch (IOException e) {
}
return null;
}
}
この問題を解決するには遅延読み込みの概念を使用するか、ビットマップでソフトリファレンスコンセプトを使用する必要があります。
私はそれを試してみましょう。ありがとうございますsenthil – Srinivas
これらのリンクは役に立つかもしれません。
http://android-developers.blogspot.com/2009/01/avoiding-memory-leaks.html
また、このリンクは、画像の読み込みを含むリスト/グリッドを実装する際に誰かが単純ではあるが劇的な間違いをどのようにコミットするかを示しています。
How to solve the vm budget memory heap error in lazy loading bitmaps?
また、アクティビティを繰り返し呼び出すときに表示されるように、アダプタのgetViewメソッドで初期化しているスレッドでイメージを読み込んでいる可能性があります。
これは一般的なことですが、私は見て、人々は実装し、同様の問題に遭遇します。
これがあなたのコードで起こっている場合は、もう一度チェックする必要があります。これは、getViewが呼び出されるすべてのリスト行のスレッドの生成につながります。
は、実は、このプロジェクトでリストビューで遅延ロードを行う方法の非常に良い例があります:Android Lazy Loading ListView。
- 1. Androidエラー:java.lang.OutOfMemoryError:ビットマップサイズがVMの予算を超えています
- 2. Android OutOfMemoryErrorビットマップサイズがVMの予算を超えています
- 3. ビットマップサイズがAndroidでVM予算を超えています
- 4. java.lang.OutOfMemoryErrorと呼ばれるメモリリークを回避する方法:ビットマップサイズがandroidのVM予算を超えています
- 5. 「ビットマップサイズがVM予算を超えています」エラーを解決する方法はありますか?
- 6. KitKatデバイスのbuildDrawingCacheで「ビットマップサイズが32ビットを超えています」
- 7. ImageView:OutOfMemoryError:ビットマップサイズがデバイスのVMバジェットを超えています
- 8. java.lang.OutOfMemoryError:ビットマップサイズがAppcelerator TitaniumのVM予算を超えています
- 9. Androidデベロッパーコンソールの不思議なスタックトレース(ビットマップサイズが32ビットを超えています)
- 10. ビットマップサイズがVM予算を超えています
- 11. appcacheクォータを処理する方法がエラーを超えましたか?
- 12. アンドロイド - OutofMemoryError - ビットマップサイズがVM予算を超えています。向きの変更
- 13. ゲーム開発時にビットマップサイズがVM予算を超えています
- 14. Android:ビットマップサイズがVMの予算を超えています。キャンバスに画像を読み込む
- 15. OOM例外 - ビットマップサイズがVMバジェットを超過しています
- 16. java.lang.OutOfMemoryErrorを乗り越えてください:ビットマップサイズがVMの予算を超えています
- 17. 何がajaxを処理し、プロトタイプを超えているhtmlを生成する最良の方法ですか
- 18. ASP.NET MVC:maxRequestLengthを超えるアップロードの処理
- 19. ファントムがエラーを処理する方法
- 20. この奇妙な問題を解決するには "IllegalArgumentException:ビットマップサイズが32ビットを超えています"
- 21. 2.2を除くすべてのバージョンでMy Appを実行すると、エラーが発生します。ビットマップサイズがVMの予算を超えています
- 22. 品質の表示画像 - ビットマップサイズがVM予算を超過エラー
- 23. 致命的なエラーを処理して処理する方法
- 24. androidのrxjava2でのエラー処理方法
- 25. Android Studio、adbエラーの処理方法
- 26. ANDROID:ヘルプ、outofmemoryビットマップが予算サイズを超えています。リサイクル方法は?
- 27. OutOfMemoryError:ビットマップサイズがVMの予算を超えています(画像サイズの問題ではありません)
- 28. java.lang.OutOfMemoryError:ビットマップサイズがVMの予算を超過します
- 29. アセンブリが512バイトを超える場合の対処方法
- 30. PHPアップロード - ファイルがupload_max_filesizeを超えているときにエラーを返す方法?
私はこのコードがあなたを助けるかもしれないと思います –