位图和内存资源
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 设计的明显鼓励,我们改变了应用程序的整体外观。它现在使用更少的图像和更多的彩色方块(视图)。内存问题已解决。
我正在编写一个使用相机生成的位图图像的应用程序。这些由应用程序裁剪和存储。用户可以在接下来的 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 设计的明显鼓励,我们改变了应用程序的整体外观。它现在使用更少的图像和更多的彩色方块(视图)。内存问题已解决。