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

时间:2015-02-28 11:54:24

标签: android android-drawable android-image android-bitmap

我正在使用Android应用程序,在3Gb Ram的设备中工作正常,但在512 mbRam的设备中效果不佳。我收到错误“位图大小超过VM预算”我不知道如何解决它。这是我使用许多drawables的布局代码。

<?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();
            }
        }

4 个答案:

答案 0 :(得分:2)

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

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

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

//显示 Bitmap bitmap =((BitmapDrawable)imageView.getDrawable())。getBitmap();

答案 1 :(得分:0)

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

android:largeHeap="true"
清单中的应用程序标签中的

可能会有所帮助,但它并没有解决问题。

了解更多信息我可以给你这个链接,它完全解释了这个问题,我不能再添加任何内容了: 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);

另见此链接: https://stackoverflow.com/a/17990482/2101822

希望它有所帮助;)

答案 2 :(得分:0)

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标记 在您项目的清单文件中。
  • 使用图形编辑器调整图像大小并减小其大小和尺寸。尺寸。

注意:其中一个答案表示&#34; 此错误仅在logcat中显示,不会影响您的应用。&#34;所以,是的,那是完全错误的。 OutOfMemoryErrorError,比RuntimeException更有害。它会让应用程序瘫痪。

答案 3 :(得分:0)

增加堆大小。

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