位图和内存资源

Bitmaps and memory resources

我正在编写一个使用相机生成的位图图像的应用程序。这些由应用程序裁剪和存储。用户可以在接下来的 activity 中将这些图像用作玩家令牌。存在一个问题,应用程序似乎保留所有这些图像并将它们存储在内存中,直到应用程序崩溃。

回顾一下:activity(选择屏幕)最多包含 19 张图像。接下来的 activity(游戏画面)包含从选择画面中选择的 1 到 8 张图像。这工作正常(尽管应用程序在这个阶段达到了大约 120mb)。

当用户返回选择屏幕开始新游戏并再次选择图像时,我们遇到了超过 170mb 并且应用程序崩溃。

我一直在阅读这篇文章并尝试人们提供的不同解决方案,但到目前为止没有任何不同。我缺少一些简单的东西吗?或者这是否需要对我目前所做的一切进行复杂的重新布线?

编辑

使用以下代码添加的图像。在玩家选择屏幕中:

File file = getFileStreamPath("imgPlayer1.png");
    if(file.exists()) {
        btnP1.setImageBitmap(getThumbnail("imgPlayer1.png"));
        g.setPlayer1img(true);
    } else {
        btnP1.setImageResource(R.drawable.player_blank);
        g.setPlayer1img(false);
    }

在游戏画面上:

if (g.getPlayer1Chosen()) {
        btnGP1.setImageBitmap(getThumbnail("imgPlayer1.png"));
        btnGP1.setVisibility(View.VISIBLE);
    }

原创代码:

try {
        FileOutputStream fos = context.openFileOutput("img" + foo + ".png",
                Context.MODE_PRIVATE);

        image.compress(Bitmap.CompressFormat.PNG, 100, fos);
        fos.close();

        return true;
    } catch (Exception e) {
        Log.e("saveToInternalStorage()", e.getMessage());
        return false;
    }

我读过有关在调用时压缩图像大小的内容,但响应是图像质量大大降低。这不可能发生。另外,好像我只是那样做,问题仍然存在,它只是以较慢的速度泄漏内存。

我没有找到解决办法。 Android 上的图像使用效率非常低。随着对 material 设计的明显鼓励,我们改变了应用程序的整体外观。它现在使用更少的图像和更多的彩色方块(视图)。内存问题已解决。