很抱歉,如果这个问题有点明显,但我已经创建了一个应用程序,其中包含一些MainScreen上的自定义按钮。一开始,一切都很好,但后来我做了些什么,不知道是什么,不幸的是我已经忘记了我做了什么。但是现在,我得到了这个恼人的OutOfMemory错误,因为我不是那个专业的编程,我现在陷入了解决这个问题的困境。我已经尝试设置管理位图内存,也下载了示例应用程序,但我迷失在那里,我甚至没有找到看起来像一个主屏幕的东西。
我试图将此代码放在我的MainScreen.java中的开发者网站上,但我认为这不是它的工作方式:
//.......old code(not important)........
如果有人可以帮助我,我会很高兴,我在这个问题上被困了3个小时。
更新
我现在正在尝试缩小我的所有图像,然后按此(Android dev link)我就这么远了(以下代码来自我的主屏幕,这是我的主要活动):
//....................
@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中的imageview吗?
毕竟它不能正常工作,我仍然会出现内存错误。
答案 0 :(得分:0)
如果您不需要,请不要一次性加载所有图像。此外,使用bitmap.recycle()
删除位图并在完成位图后节省内存。你需要每个按钮图标吗?