OutOfMemory错误,不知道如何设置位图

时间:2015-04-09 19:50:26

标签: android image button bitmap out-of-memory

很抱歉,如果这个问题有点明显,但我已经创建了一个应用程序,其中包含一些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吗?

毕竟它不能正常工作,我仍然会出现内存错误。

1 个答案:

答案 0 :(得分:0)

如果您不需要,请不要一次性加载所有图像。此外,使用bitmap.recycle()删除位图并在完成位图后节省内存。你需要每个按钮图标吗?