Android Bitmap释放内存 - 这一切都无效

时间:2011-12-10 22:27:21

标签: android memory memory-leaks bitmap drawable

我得到“位图大小超过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

3 个答案:

答案 0 :(得分:5)

如果您想确保释放Bitmapsrecycle(),则必须在那些不再需要的Bitmaps上致电{{1}}。如果您需要所有这些,请回收最近最少使用过的(并在需要时再次加载它们)。

答案 1 :(得分:3)

当你不再需要drawable时,你应该尝试使用drawable.setCallback(null);,因为即使你正在使用WeakHashMap,它们仍然可以通过它们的回调属性附加到上下文。

请参阅this

答案 2 :(得分:0)

我正在处理ImageView,我使用imageView.clearAnimation()解决了内存问题;在分配新位图之前,现在我没有内存错误。