Androidでは設定した背景画像が大きすぎてOOM

4332 ワード

Androidで設定した背景画像が大きすぎるとOOMになる可能性があります
例えばmImageView.setImageBitmap();
レイアウトファイル
android:background="@drawable/xxx.jpg"
次のいずれかの処理方法を示します.
public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId,

                                                             int reqWidth, int reqHeight) {

            // First decode with inJustDecodeBounds=true to check dimensions

            final BitmapFactory.Options options = new BitmapFactory.Options();

            options.inJustDecodeBounds = true;

            BitmapFactory.decodeResource(res, resId, options);

            // Calculate inSampleSize

            options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);

            // Decode bitmap with inSampleSize set

            options.inJustDecodeBounds = false;

            return BitmapFactory.decodeResource(res, resId, options);

        }



        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) {

                // Calculate ratios of height and width to requested height and width

                final int heightRatio = Math.round((float) height / (float) reqHeight);

                final int widthRatio = Math.round((float) width / (float) reqWidth);



                // Choose the smallest ratio as inSampleSize value, this will guarantee

                // a final image with both dimensions larger than or equal to the

                // requested height and width.

                inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;

            }

            return inSampleSize;

        }

コードにロードするピクチャを処理することで、得られたbitmapをコントロールに設定すればよい.