我在画布上绘制背景活动时出现问题(所有尺寸的显示背景)应用程序崩溃,因为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行崩溃应用程序上的显示大小。 在这个活动上没有位图。
答案 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);
希望它会对你有所帮助:)。