我得到“位图大小超过VM预算”,最终我的应用程序。所以我添加了所有这些东西来帮助缓解不断增加的内存占用
BitmapFactory.Options options = new BitmapFactory.Options();
options.inTempStorage = new byte[32*1024];
options.inDither=false; //Disable Dithering mode
options.inPurgeable=true; //Tell to gc that whether it needs free memory, the Bitmap can be cleared
options.inInputShareable=true; //Which kind of reference will be used to recover the Bitmap data after being clear, when it will be used in the future
options.inPreferredConfig = Bitmap.Config.RGB_565;
Drawable pulled = BitmapDrawable.createFromResourceStream(null, null, conn.getInputStream(), "galleryImage", options);
我也在使用weakhashmaps,recycle,System.gc()
所有这一切都成功地延长了崩溃。最初具有32M堆的设备在崩溃之前只能处理一些图像,现在它可以处理十几个,但这并不能解决问题。问题是BitMap方法泄漏了内存而根本无法清除。
我该如何解决这个问题?图像尺寸为256x357
答案 0 :(得分:5)
如果您想确保释放Bitmaps
个recycle()
,则必须在那些不再需要的Bitmaps
上致电{{1}}。如果您需要所有这些,请回收最近最少使用过的(并在需要时再次加载它们)。
答案 1 :(得分:3)
当你不再需要drawable时,你应该尝试使用drawable.setCallback(null);
,因为即使你正在使用WeakHashMap,它们仍然可以通过它们的回调属性附加到上下文。
请参阅this
答案 2 :(得分:0)
我正在处理ImageView,我使用imageView.clearAnimation()解决了内存问题;在分配新位图之前,现在我没有内存错误。