bitmap.recycle()不起作用

时间:2016-06-16 06:56:40

标签: java android memory bitmap

我在画布上绘制背景活动时出现问题(所有尺寸的显示背景)应用程序崩溃,因为OutOfMemoryError。

我尝试使用recycle(),如果我到达了回收位图的启动活动,我就把这个代码放进去。

private void RecyklGO(Bitmap bitmap,Bitmap bitmap2) {
        bitmap.recycle();
        bitmap2.recycle();
    }

但是我在androidstudio中观看内存时我没有看到变化。

接下来我踩着程序,我看到了,.recykle没有跑。

我想要删除位图告诉Game Over,如果用户点击Play Again我想删除这个位图,因为我想要放置背景。 (活动在Canvas上,所以所有内容都写在它上面。没有切换活动,只重写画布。)

感谢您的任何想法。

_____________更多代码___________________________-

bcgGO = BitmapFactory.decodeResource(getResources(), R.drawable.bcg_go);
    bcgGO = Bitmap.createScaledBitmap(
            bcgGO, (int) (srk ), (int) (vsk), false);
    canvas.drawBitmap(bcgGO, srk / 5, vsk / 4.2F, paint);

变量srk和vsk是Bitmap.createScaledBitmap行崩溃应用程序上的显示大小。 在这个活动上没有位图。

1 个答案:

答案 0 :(得分:0)

根据您的输入,我发现了一个问题,因为您的代码是:

bcgGO = BitmapFactory.decodeResource(getResources(), R.drawable.bcg_go);
bcgGO = Bitmap.createScaledBitmap(
        bcgGO, (int) (srk ), (int) (vsk), false);
canvas.drawBitmap(bcgGO, srk / 5, vsk / 4.2F, paint);

在第一行中,您将创建一个名为bcgGO的位图。但在第二行,你再次被scalled位图覆盖它。我认为它会给你带来麻烦,因为你只是覆盖了引用。所以结果是你的主位图仍然在内存中没有任何ref。对象,你不能回收它,因为你没有参考。 检查一点修改,它可能会增加内存性能:

    Bitmapt actBcgGO = BitmapFactory.decodeResource(getResources(), R.drawable.bcg_go);
    bcgGO = Bitmap.createScaledBitmap(
            actBcgGO, (int) (srk ), (int) (vsk), false);
    actBcgGO.recycle();
    canvas.drawBitmap(bcgGO, srk / 5, vsk / 4.2F, paint);

希望它会对你有所帮助:)。