gpt4 book ai didi

android - 为什么我创建的位图总是泄漏内存?

转载 作者:行者123 更新时间:2023-11-29 21:56:26 24 4
gpt4 key购买 nike

我正在尝试使用 reflect 创建一个 drawable,这是我的代码:

public Drawable createReflectedImage(Drawable d) {

int width = d.getIntrinsicWidth();
int height = d.getIntrinsicHeight();
Bitmap originalImage = Bitmap.createBitmap(width, height,
Config.ARGB_8888);
d.setBounds(0, 0, width, height);
Canvas canvas = new Canvas(originalImage);
d.draw(canvas);

final int reflectionGap = 4;

Matrix matrix = new Matrix();
matrix.preScale(1, -1);

Bitmap reflectionImage = Bitmap.createBitmap(originalImage, 0,
height / 2, width, height / 2, matrix, false);

Bitmap bitmapWithReflection = Bitmap.createBitmap(width,
(height + height / 2), Config.ARGB_8888);

canvas = new Canvas(bitmapWithReflection);

canvas.drawBitmap(originalImage, 0, 0, null);

Paint deafaultPaint = new Paint();
canvas.drawRect(0, height, width, height + reflectionGap, deafaultPaint);

canvas.drawBitmap(reflectionImage, 0, height + reflectionGap, null);

Paint paint = new Paint();
LinearGradient shader = new LinearGradient(0,
originalImage.getHeight(), 0, bitmapWithReflection.getHeight()
+ reflectionGap, 0x70ffffff, 0x00ffffff,
TileMode.MIRROR);

paint.setShader(shader);

paint.setXfermode(new PorterDuffXfermode(Mode.DST_IN));

canvas.drawRect(0, height, width, bitmapWithReflection.getHeight()
+ reflectionGap, paint);
BitmapDrawable drawable = new BitmapDrawable(getContext()
.getResources(), bitmapWithReflection);
originalImage.recycle();
reflectionImage.recycle();
return drawable;
}

每次调用 createReflectedImage 时都会显示以下日志,即使我只是在此函数末尾返回 null。

10-29 10:56:48.541: I/dalvikvm-heap(23989): Grow heap (frag case) to 19.332MB for 960016-byte allocation

谁能帮我弄清楚这个内存泄漏是怎么发生的?

最佳答案

这不是内存泄漏。每个 Android 设备都有每个应用程序的最大堆大小。出于性能原因,Android 不会为每个应用程序分配该大小,而是等到应用程序需要更多内存时再分配。您看到的这条消息是 DVM 在您的应用请求时分配更多内存,这是完全正常的。

在内存泄漏期间,您会看到 GC 启动得太频繁,这会在 logcat 中提示您消息。

关于android - 为什么我创建的位图总是泄漏内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13115414/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com