【问题标题】:bitmap.recycle() not workingbitmap.recycle() 不工作
【发布时间】:2016-06-16 06:56:40
【问题描述】:

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

我尝试使用 recycle(),如果我到达了回收位图的启动活动,我会将这段代码放入其中。

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

但我在 androidstudio 中观看 Memory 并没有看到变化。

接下来我执行步进程序,我看到了,.recykle 没有运行。

我想删除告诉游戏结束的位图,如果用户点击再次播放我想删除这个位图,因为我想放置背景。 (activity在Canvas上,所以都写在上面了。没有switch activity,只重写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 行崩溃应用程序上显示的大小。 在这个活动中没有位图。

【问题讨论】:

  • 输入太少,请分享您的最大代码,以了解内存增加的方式和位置。
  • 我确实把代码放在了应用崩溃的地方。还是会把应用中的所有代码放在哪里?
  • 最好至少共享负责增加内存的类或所有代码,以便任何人都能找到确切的问题。

标签: java android memory bitmap


【解决方案1】:

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

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 的位图。但是在第二行中,您再次用所谓的位图覆盖它。我认为这给您带来了问题,因为您只是在覆盖参考。所以结果是你的主位图仍然在内存中,没有任何参考。对象,你不能回收它,因为你没有参考。 检查一些修改,它可能会增加内存性能:

    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);

希望对你有帮助:)

【讨论】:

  • 好的,现在回收 actBcgGO,但我也需要回收 bcgGO,不是吗?
  • 不,根据您的代码,无论如何您都不会使用实际的位图图像。因为您已经通过缩放位图覆盖了实际位图的引用。因此,在创建缩放位图之后,应该回收实际的位图(actBcgGo)。是的,使用后你也可以回收它,如果不在任何地方重复使用。
  • 那么,现在一切都好吗?如果我将位图写入画布,我会用你的 soce 重写我的代码吗?因为如果我在 android studio 中观察内存使用过程,在你的代码之前(你的代码在显示大小的背景上打开位图)和你的代码之后的方法是不一样的。我的事情如果一切都好,一定是一样的,不是吗? (我将删除所有位图并比较更改)
  • 如果删除所有位图,每个方法的内存使用量都是恒定的。
  • 根据您共享的代码,问题是每个原始位图都在内存中并且从未回收过。现在,在更新的代码中,您在获得缩放位图后正在回收实际更大的位图。所以它会改变很多,我希望:)
猜你喜欢
  • 2015-11-14
  • 2015-04-21
  • 2013-01-13
  • 1970-01-01
  • 2012-08-10
  • 2011-09-09
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多