回收使用createScaledBitmap创建的位图

时间:2018-03-20 09:04:26

标签: android canvas bitmap out-of-memory scale

我写了一个示例代码来一般性地显示我的问题。

基本上,在一个视图的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左右。 如果我越来越多地这样做,它就会消失。通过回收位图,我应该能够没有限制地完成它。

0 个答案:

没有答案