我正在使用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();
}
}
答案 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;所以,是的,那是完全错误的。 OutOfMemoryError
是Error
,比RuntimeException
更有害。它会让应用程序瘫痪。
答案 3 :(得分:0)
增加堆大小。
在AndroidManifest.xml
中,将android:largeHeap=“true”
属性添加到Application
代码。