即使我回收位图,内存使用量也不会减少

我有A和B活动。 当我从活动A开始活动B时,我在活动B上设置静态位图变量。我在屏幕上显示该位图并旋转它。

当活动B完成后,我在onDestroy()方法上回收所有位图,但内存使用量没有减少。

@Override protected void onDestroy() { super.onDestroy(); if (bitmap90 != null) { bitmap90.recycle(); bitmap90 = null; } if (bitmap180 != null) { bitmap180.recycle(); bitmap180 = null; } if (bitmap270 != null) { bitmap270.recycle(); bitmap270 = null; } if (mBitmap != null) { mBitmap.recycle(); mBitmap = null; } if (((BitmapDrawable) ivOriginal.getDrawable()).getBitmap() != null) { ((BitmapDrawable) ivOriginal.getDrawable()).getBitmap().recycle(); ivOriginal.setImageDrawable(null); } if (((BitmapDrawable) ivOriginal90.getDrawable()).getBitmap() != null) { ((BitmapDrawable) ivOriginal90.getDrawable()).getBitmap().recycle(); ivOriginal90.setImageDrawable(null); } System.gc(); } 

来自Android Developer

释放与此位图关联的本机对象,并清除对像素数据的引用。 这不会同步释放像素数据; 如果没有其他引用,它只是允许它被垃圾收集 。 位图标记为“死”,这意味着如果调用getPixels()或setPixels(),它将抛出exception,并且不会绘制任何内容。 此操作无法撤消,因此只有在确定位图没有进一步用途时才应调用此操作。 这是一个高级调用,通常不需要调用,因为正常的GC进程将在没有更多对此位图的引用时释放此内存。

回收只是确保在调用GC时您的位图将被回收。 对于System.gc来说也是如此,它无法确保gc现在可以运行,它只会要求gc运行,但GC只会在系统想要它运行时运行。

所以放松一下,如果你回收位图,他们会得到回收,最后只是给它一些时间。