OutOfMemory 错误,不知道如何设置位图
OutOfMemory error, and no idea how to set up bitmaps
抱歉,如果这个问题有点明显,但我已经创建了一个应用程序,它在主屏幕上包含一堆自定义按钮。一开始,一切正常,但后来我做了一些东西,不知道是什么,不幸的是我忘记了我做了什么。但是现在,我遇到了这个烦人的 OutOfMemory 错误,而且由于我不是编程专家,所以我现在只能解决这个问题。我已经尝试设置管理位图内存,还下载了示例应用程序,但我在那里迷路了,我什至没有找到看起来像主屏幕的东西。
我曾尝试将此代码从开发人员站点放入我的 MainScreen.java,但我认为这不是它的工作方式:
//.......old code(not important)........
如果有人能帮助我,我会很高兴,我在这个问题上被困了大约 3 个小时。
更新
我现在正在尝试缩小我所有的图像,然后是这个 (Android dev link) 我已经这么远了(以下代码来自我的 MainScreen,这是我的主要活动):
//....................
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(getResources(), R.id.imageView1, options);
int imageHeight = options.outHeight;
int imageWidth = options.outWidth;
String imageType = options.outMimeType;
BitmapFactory.decodeResource(getResources(), R.drawable.hiscr, options);
BitmapFactory.decodeResource(getResources(), R.drawable.sharebutton, options);
BitmapFactory.decodeResource(getResources(), R.drawable.buttongame, options);
BitmapFactory.decodeResource(getResources(), R.drawable.buttongame1, options);
BitmapFactory.decodeResource(getResources(), R.drawable.btn_start, options);
BitmapFactory.decodeResource(getResources(), R.drawable.btn_start2, options);
BitmapFactory.decodeResource(getResources(), R.drawable.btn_start3, options);
BitmapFactory.decodeResource(getResources(), R.drawable.btn_start3locked, options);
BitmapFactory.decodeResource(getResources(), R.drawable.btn_start2locked, options);
}
//.........up there i'm trying to decode all my stuff, It contains buttons.xml , images and imageviews.
//..................In the code below I'm trying to get the downscaled pictures.
public static int calculateInSampleSize(
BitmapFactory.Options options, int reqWidth, int reqHeight) {
// Raw height and width of image
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;
if (height > reqHeight || width > reqWidth) {
final int halfHeight = height / 2;
final int halfWidth = width / 2;
// Calculate the largest inSampleSize value that is a power of 2 and keeps both
// height and width larger than the requested height and width.
while ((halfHeight / inSampleSize) > reqHeight
&& (halfWidth / inSampleSize) > reqWidth) {
inSampleSize *= 2;
}
}
return inSampleSize;
}
//...............
我可以将 decodeResource 用于所有内容吗,如上面所列的 xml 中的自定义按钮、drawable 文件夹中的 pictures.png 以及 layout.xml 中的图像视图?
毕竟它不起作用,我仍然收到内存不足错误。
如果不需要,请不要一次加载所有图片。此外,使用 bitmap.recycle()
删除位图并在完成位图后节省内存。您需要每个按钮图标吗?
抱歉,如果这个问题有点明显,但我已经创建了一个应用程序,它在主屏幕上包含一堆自定义按钮。一开始,一切正常,但后来我做了一些东西,不知道是什么,不幸的是我忘记了我做了什么。但是现在,我遇到了这个烦人的 OutOfMemory 错误,而且由于我不是编程专家,所以我现在只能解决这个问题。我已经尝试设置管理位图内存,还下载了示例应用程序,但我在那里迷路了,我什至没有找到看起来像主屏幕的东西。
我曾尝试将此代码从开发人员站点放入我的 MainScreen.java,但我认为这不是它的工作方式:
//.......old code(not important)........
如果有人能帮助我,我会很高兴,我在这个问题上被困了大约 3 个小时。
更新
我现在正在尝试缩小我所有的图像,然后是这个 (Android dev link) 我已经这么远了(以下代码来自我的 MainScreen,这是我的主要活动):
//....................
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(getResources(), R.id.imageView1, options);
int imageHeight = options.outHeight;
int imageWidth = options.outWidth;
String imageType = options.outMimeType;
BitmapFactory.decodeResource(getResources(), R.drawable.hiscr, options);
BitmapFactory.decodeResource(getResources(), R.drawable.sharebutton, options);
BitmapFactory.decodeResource(getResources(), R.drawable.buttongame, options);
BitmapFactory.decodeResource(getResources(), R.drawable.buttongame1, options);
BitmapFactory.decodeResource(getResources(), R.drawable.btn_start, options);
BitmapFactory.decodeResource(getResources(), R.drawable.btn_start2, options);
BitmapFactory.decodeResource(getResources(), R.drawable.btn_start3, options);
BitmapFactory.decodeResource(getResources(), R.drawable.btn_start3locked, options);
BitmapFactory.decodeResource(getResources(), R.drawable.btn_start2locked, options);
}
//.........up there i'm trying to decode all my stuff, It contains buttons.xml , images and imageviews.
//..................In the code below I'm trying to get the downscaled pictures.
public static int calculateInSampleSize(
BitmapFactory.Options options, int reqWidth, int reqHeight) {
// Raw height and width of image
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;
if (height > reqHeight || width > reqWidth) {
final int halfHeight = height / 2;
final int halfWidth = width / 2;
// Calculate the largest inSampleSize value that is a power of 2 and keeps both
// height and width larger than the requested height and width.
while ((halfHeight / inSampleSize) > reqHeight
&& (halfWidth / inSampleSize) > reqWidth) {
inSampleSize *= 2;
}
}
return inSampleSize;
}
//...............
我可以将 decodeResource 用于所有内容吗,如上面所列的 xml 中的自定义按钮、drawable 文件夹中的 pictures.png 以及 layout.xml 中的图像视图?
毕竟它不起作用,我仍然收到内存不足错误。
如果不需要,请不要一次加载所有图片。此外,使用 bitmap.recycle()
删除位图并在完成位图后节省内存。您需要每个按钮图标吗?