我写了一个示例代码来一般性地显示我的问题。
基本上,在一个视图的onDraw中,我想创建一个按比例放大的位图,在画布上绘制它,重新编写该位图并释放它的内存,并在循环中反复执行。
问题是内存在循环的每一步都会增长和增长,即使在onDraw完成之后,即使在等待一段时间后,内存也会保持满。
就我的逻辑而言,canvas已经包含一个像屏幕一样大小的位图,所以无论我绘制它的内存大小都不应该增长,我想每个扩展的位图都保留在内存中,即使我调用了回收它们,即使它们的参考被破坏了。
我哪里错了? 谢谢!
@Override
protected void onDraw(Canvas canvas) {
canvas.drawColor(0, PorterDuff.Mode.CLEAR);
int i=0;
while(i<10) {
matrix = new Matrix();
bitmapToDraw = Bitmap.createScaledBitmap(bitmap, canvas.getWidth(), canvas.getHeight(), false);
canvas.drawBitmap(bitmapToDraw, matrix, imagePaintF);
bitmapToDraw.recycle();
bitmapToDraw = null;
i++;
}
super.onDraw(canvas);
}
只需重复循环10次,内存就会增长到 - 并且总是保持在200MB左右。 如果我越来越多地这样做,它就会消失。通过回收位图,我应该能够没有限制地完成它。