位图大小超出了某些设备中的 VM 预算

bitmap size exceeds VM budget in some devices

我正在做 android 应用程序,在 3Gb Ram 的设备上运行良好,但在 512 mbRam 的设备上运行不佳。我收到错误 "bitmap size exceeds VM budget" 我不知道如何解决。这是我的布局代码,它使用了很多可绘制对象。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/fondohis"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#333"
        android:gravity="bottom"
        android:orientation="vertical" >

        <Button
            android:id="@+id/button4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button" />

        <Button
            android:id="@+id/button3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button" />

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button" />

        <Button
            android:id="@+id/button5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button" />

    </LinearLayout>

    <LinearLayout
        android:id="@+id/container_2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/fondo_menu"
        android:orientation="vertical" >

        <ScrollView
            android:id="@+id/scrollView1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@drawable/transparent_negro"
            android:scrollbars="none" >

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical" >

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" >

                    <LinearLayout
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight="0.5"
                        android:gravity="center_vertical|center_horizontal"
                        android:orientation="vertical" >

                        <ImageView
                            android:id="@+id/image_episodio1"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:src="@drawable/athle" />

                        <TextView
                            android:id="@+id/episodio1"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="Los orígenes"
                            android:textColor="#FFFFFF" />

                    </LinearLayout>

                    <LinearLayout
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight="0.5"
                        android:gravity="center_vertical|center_horizontal"
                        android:orientation="vertical" >

                        <ImageView
                            android:id="@+id/image_episodio2"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:src="@drawable/pentl" />

                        <TextView
                            android:id="@+id/episodio2"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="Primera"
                             android:textColor="#FFFFFF" />
                    </LinearLayout>
                </LinearLayout>

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                     >

                    <LinearLayout
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight="0.5"
                        android:orientation="vertical"
                        android:gravity="center_vertical|center_horizontal" >

                        <ImageView
                            android:id="@+id/image_episodio3"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:src="@drawable/delant" />

                        <TextView
                            android:id="@+id/episodio3"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="Segund"
                             android:textColor="#FFFFFF" />
                    </LinearLayout>

                    <LinearLayout
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight="0.5"
                        android:orientation="vertical" 
                        android:gravity="center_vertical|center_horizontal">

                        <ImageView
                            android:id="@+id/image_episodio4"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:src="@drawable/cambios_mini" />

                        <TextView
                            android:id="@+id/episodio4"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="É"
                             android:textColor="#FFFFFF" />
                    </LinearLayout>
                </LinearLayout>

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" >

                    <LinearLayout
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight="0.5"
                        android:orientation="vertical"
                        android:gravity="center_vertical|center_horizontal" >

                        <ImageView
                            android:id="@+id/image_episodio5"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:src="@drawable/niev" />

                        <TextView
                            android:id="@+id/episodio5"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="Debut"
                             android:textColor="#FFFFFF" />
                    </LinearLayout>

                    <LinearLayout
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight="0.5"
                        android:orientation="vertical"
                        android:gravity="center_vertical|center_horizontal" >

                        <ImageView
                            android:id="@+id/image_episodio6"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:src="@drawable/aldeanos" />

                        <TextView
                            android:id="@+id/episodio6"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="La"
                             android:textColor="#FFFFFF" />
                    </LinearLayout>
                </LinearLayout>

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" >

                    <LinearLayout
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight="0.5"
                        android:orientation="vertical"
                        android:gravity="center_vertical|center_horizontal" >

                        <ImageView
                            android:id="@+id/image_episodio7"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:src="@drawable/ir" />

                        <TextView
                            android:id="@+id/episodio7"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="ss"
                             android:textColor="#FFFFFF" />
                    </LinearLayout>

                    <LinearLayout
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight="0.5"
                        android:orientation="vertical"
                        android:gravity="center_vertical|center_horizontal">

                        <ImageView
                            android:id="@+id/image_episodio8"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:src="@drawable/fin" />

                        <TextView
                            android:id="@+id/episodio8"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="kk" 
                             android:textColor="#FFFFFF"/>
                    </LinearLayout>
                </LinearLayout>

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" >

                    <LinearLayout
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight="0.5"
                        android:gravity="center_vertical|center_horizontal"
                        android:orientation="vertical" >

                        <ImageView
                            android:id="@+id/image_episodio9"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:src="@drawable/gaba" />

                        <TextView
                            android:id="@+id/episodio9"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="em"
                             android:textColor="#FFFFFF" />
                    </LinearLayout>

                    <LinearLayout
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight="0.5"
                        android:gravity="center_vertical|center_horizontal"
                        android:orientation="vertical" >

                        <ImageView
                            android:id="@+id/image_episodio10"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:src="@drawable/bie" />

                        <TextView
                            android:id="@+id/episodio10"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="yy" 
                             android:textColor="#FFFFFF"/>
                    </LinearLayout>
                </LinearLayout>
            </LinearLayout>

        </ScrollView>

    </LinearLayout>

    <LinearLayout
        android:id="@+id/container_iribar"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/fondohis"
        android:gravity="center_vertical|center_horizontal"
        android:orientation="vertical" >

        <ImageView
            android:id="@+id/imageView4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/historiacuatro" />

    </LinearLayout>

    <LinearLayout
        android:id="@+id/container_zarra"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/fondohis"
        android:gravity="center_vertical|center_horizontal"
        android:orientation="vertical" >

        <ImageView
            android:id="@+id/imageView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/historiatres" />

    </LinearLayout>

    <LinearLayout
        android:id="@+id/container_pichichi"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/fondohis"
        android:gravity="right|center_vertical"
        android:orientation="vertical" >

        <ImageView
            android:id="@+id/imageView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/historiados" />

    </LinearLayout>

    <LinearLayout
        android:id="@+id/container_histo"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/fondohis"
        android:gravity="bottom|left"
        android:orientation="vertical" >

        <ImageView
            android:id="@+id/icono_comentario"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/historiauno" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/menu_capa"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_centerVertical="true"
        android:background="@drawable/fondohis"
        android:gravity="center_vertical|center_horizontal"
        android:orientation="vertical" >

        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button"
            android:visibility="gone" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@drawable/transparent_negro"
            android:gravity="center_vertical|center_horizontal"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/titulo_portada"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/circle"
                android:text="Gure"
                android:textColor="#FFFFFF"
                android:textSize="50sp" />

            <TextView
                android:id="@+id/titulo_anos"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="TextView"
                android:textColor="#ffffff"
                android:textSize="40sp" />

        </LinearLayout>

    </LinearLayout>

</RelativeLayout>

我已经使用了我在其他问题中读到的这个,但我无法解决它:

 @Override
        protected void onDestroy() {
            super.onDestroy();

            unbindDrawables(findViewById(R.id.RootView));
            System.gc();
        }

        private void unbindDrawables(View view) {
            if (view.getBackground() != null) {
                view.getBackground().setCallback(null);
            }
            if (view instanceof ViewGroup) {
                for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
                    unbindDrawables(((ViewGroup) view).getChildAt(i));
                }
                ((ViewGroup) view).removeAllViews();
            }
        }

RAM 与 VM 预算无关。您必须减小位图大小。当然添加这一行:

android:largeHeap="true"

在您的清单中的应用程序标签中可能会有所帮助,但不能解决问题。

有关更多信息,我可以给你这个 link,它完全解释了这个问题,我不能再添加任何内容了: Strange out of memory issue while loading an image to a Bitmap object

你必须这样做:

BitmapFactory.Options options=new BitmapFactory.Options();
options.inSampleSize = 8;
Bitmap preview_bitmap=BitmapFactory.decodeStream(is,null,options);

另请参阅此 link:

希望对您有所帮助 ;)

在 ImageView 上显示位图时,您可以压缩位图。

image.buildDrawingCache();
Bitmap img = image.getDrawingCache();

ByteArrayOutputStream stream = new ByteArrayOutputStream();
img.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] food = stream.toByteArray();

//显示 位图位图 = ((BitmapDrawable) imageView.getDrawable()).getBitmap();

1. 用于处理 Bitmap 个对象:

BitmapFactory.Options options=new BitmapFactory.Options();
options.inSampleSize = 8;
options.inDither = false;
options.inPurgeable = true;
options.inInputShareable = true;
Bitmap bitmap = BitmapFactory.decodeStream(is, null, options);

此外,您需要使用

bitmap.recycle();

在使 Bitmap 实例为空之前。这将有助于节省内存。

2. 用于处理 res/drawable:

中的图像
  • android:largeHeap=“true” 属性添加到 application 标签 在项目的清单文件中。
  • 使用图形编辑器调整图像大小并缩小它们的尺寸。

注意: 其中一个答案说“此错误只会在 logcat 中可见,它不会影响您的应用程序。 " 所以是的,这完全是错误的。 OutOfMemoryError 是 Java Error,甚至比 RuntimeException 更有害。它将使应用程序崩溃。

增加堆大小。

AndroidManifest.xml 中,将 android:largeHeap=“true” 属性添加到 Application 标签。