external allocation too large for this process,Error inflating class, bitmap size exceeds VM budget

Cho*_*Yan 5 android android-manifest android-emulator

Posted my problem here too.

A beginner..I am doing a school map app.

First of all I have background with 4 buttons ( level3, level4, level5, level6).

I try and click all the buttons, normally after clicking 3 of it, the next one will crash.(each level button goes into a level map, whereby clicking the room image buttons, I will enter into the gallery-imageswitcher)

I have at least 5 ImageSwitchers in each level maps,so that about over 20 ImageSwitcher galleries overall.

I did all my stuffs using Drawable instead of Bitmap. I have tons and tons of images (because its a school map, show all the photos in my school, and all those backgrounds and ImageButton)

我做了一些研究,那些有问题的人是那些使用位图的人.可以解决的一些方法是system.gc();,bitmap.recycle(并不确定如何使用它)

在我的主要背景 - starttour.java

 public class StartTour extends Activity {  
       private SoundManager mSoundManager;  
       /** Called when the activity is first created. */  
       @Override  
       public void onCreate(Bundle savedInstanceState) {  
           super.onCreate(savedInstanceState);  
           setContentView(R.layout.ttour);  

           mSoundManager = new SoundManager();  
           mSoundManager.initSounds(getBaseContext());  
           mSoundManager.addSound(1, R.raw.beep);  

           //play music  
           final MediaPlayer mPlayer = MediaPlayer.create(this, R.raw.jazz);  
             mPlayer.start();  

           final Button button = (Button) findViewById(R.id.back);  

           button.setOnClickListener(new Button.OnClickListener() {    

               // Implement the OnClickListener callback  
               public void onClick(View v) {  
                 // do something when the button is clicked           
                   startActivity(new Intent("android.com.Android"));   
                   mSoundManager.playSound(1);  
                   mPlayer.stop();  
               }  
           });  

               final Button button1 = (Button) findViewById(R.id.level3);  
               button1.setOnClickListener(new Button.OnClickListener() {  
                   public void onClick(View v) {  
                       // Perform action on click  
                        startActivity(new Intent("android.com.Lvl3"));  
                        mSoundManager.playSound(1);  
                        mPlayer.stop();  

                   }  
                });  

               final Button button2 = (Button) findViewById(R.id.level4);  
               button2.setOnClickListener(new Button.OnClickListener() {  
                   public void onClick(View v) {  
                       // Perform action on click  
                        startActivity(new Intent("android.com.Lvl4"));  
                        mSoundManager.playSound(1);  
                        mPlayer.stop();  

                   }  
                });              


               final Button button3 = (Button) findViewById(R.id.level5);  
               button3.setOnClickListener(new Button.OnClickListener() {  
                   public void onClick(View v) {  
                       // Perform action on click  
                        startActivity(new Intent("android.com.Lvl5"));  
                        mSoundManager.playSound(1);  
                        mPlayer.stop();  

                   }  
                });  

               final Button button4 = (Button) findViewById(R.id.level6);  
               button4.setOnClickListener(new Button.OnClickListener() {  
                   public void onClick(View v) {  
                       // Perform action on click  
                        startActivity(new Intent("android.com.Lvl6"));  
                        mSoundManager.playSound(1);  
                        mPlayer.stop();  

                   }  
                });  
       }  
   }





<ImageView android:id="@+id/ilevel4" android:layout_width="wrap_content"
                android:layout_height="fill_parent" android:src="@drawable/level4map"
                android:layout_gravity="center"/>

<Button
        android:id="@+id/m412button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="92.5px"
        android:layout_marginTop="95px"
        android:background="@drawable/m412_button" />    

<Button
        android:id="@+id/m411button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="92.5px"
        android:layout_marginTop="248.8px"
        android:background="@drawable/m411_button" />

<Button
        android:id="@+id/m410button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="92.5px"
        android:layout_marginTop="334.8px"
        android:background="@drawable/m410_button" />   


<Button
        android:id="@+id/m405button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="6px"
        android:layout_marginTop="246.5px"
        android:background="@drawable/m405_button" />

<Button
        android:id="@+id/m406button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="6px"
        android:layout_marginTop="335px"
        android:background="@drawable/m406_button" />  

<Button
        android:id="@+id/m419button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="260px"
        android:layout_marginTop="59.5px"
        android:background="@drawable/m419_button" />      

<Button
        android:id="@+id/m420button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="260px"
        android:layout_marginTop="168.5px"
        android:background="@drawable/m420_button" />   

<Button
        android:id="@+id/m421button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="260px"
        android:layout_marginTop="240.5px"
        android:background="@drawable/m421_button" />

<Button
        android:id="@+id/m422button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="260px"
        android:layout_marginTop="335px"
        android:background="@drawable/m422_button" />              
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

在我的水平4.xml

     <ImageView android:id="@+id/ilevel4" android:layout_width="wrap_content"  
                    android:layout_height="fill_parent" android:src="@drawable/level4map"  
                    android:layout_gravity="center"/>  

   <Button  
           android:id="@+id/m412button"  
           android:layout_width="wrap_content"  
           android:layout_height="wrap_content"  
           android:layout_marginLeft="92.5px"  
           android:layout_marginTop="95px"  
           android:background="@drawable/m412_button" />      

   <Button  
           android:id="@+id/m411button"  
           android:layout_width="wrap_content"  
           android:layout_height="wrap_content"  
           android:layout_marginLeft="92.5px"  
           android:layout_marginTop="248.8px"  
           android:background="@drawable/m411_button" />  

   <Button  
           android:id="@+id/m410button"  
           android:layout_width="wrap_content"  
           android:layout_height="wrap_content"  
           android:layout_marginLeft="92.5px"  
           android:layout_marginTop="334.8px"  
           android:background="@drawable/m410_button" />     


   <Button  
           android:id="@+id/m405button"  
           android:layout_width="wrap_content"  
           android:layout_height="wrap_content"  
           android:layout_marginLeft="6px"  
           android:layout_marginTop="246.5px"  
           android:background="@drawable/m405_button" />  

   <Button  
           android:id="@+id/m406button"  
           android:layout_width="wrap_content"  
           android:layout_height="wrap_content"  
           android:layout_marginLeft="6px"  
           android:layout_marginTop="335px"  
           android:background="@drawable/m406_button" />    

   <Button  
           android:id="@+id/m419button"  
           android:layout_width="wrap_content"  
           android:layout_height="wrap_content"  
           android:layout_marginLeft="260px"  
           android:layout_marginTop="59.5px"  
           android:background="@drawable/m419_button" />        

   <Button  
           android:id="@+id/m420button"  
           android:layout_width="wrap_content"  
           android:layout_height="wrap_content"  
           android:layout_marginLeft="260px"  
           android:layout_marginTop="168.5px"  
           android:background="@drawable/m420_button" />     

   <Button  
           android:id="@+id/m421button"  
           android:layout_width="wrap_content"  
           android:layout_height="wrap_content"  
           android:layout_marginLeft="260px"  
           android:layout_marginTop="240.5px"  
           android:background="@drawable/m421_button" />  

   <Button  
           android:id="@+id/m422button"  
           android:layout_width="wrap_content"  
           android:layout_height="wrap_content"  
           android:layout_marginLeft="260px"  
           android:layout_marginTop="335px"  
           android:background="@drawable/m422_button" />                   
   </RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

在level4.java中

  public class Level4 extends Activity {  
        /** Called when the activity is first created. */  
        @Override  
        public void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.tlevel4);  

            final Button button1 = (Button) findViewById(R.id.m405button);  
            button1.setOnClickListener(new OnClickListener() {  
               public void onClick(View v) {  
                       // Perform action on click  
                    startActivity(new Intent("android.com.M405"));  
               }  
           });  

           final Button button2 = (Button) findViewById(R.id.m406button);  
           button2.setOnClickListener(new OnClickListener() {  
               public void onClick(View v) {  
                       // Perform action on click  
                    startActivity(new Intent("android.com.M406"));  
               }  
           });  
           }  
         }
Run Code Online (Sandbox Code Playgroud)

在logcat中

11-03 12:35:55.194: ERROR/dalvikvm-heap(708): 483406-byte external allocation too large for this process.
11-03 12:35:55.194: ERROR/(708): VM won't let us allocate 483406 bytes
11-03 12:35:55.204: DEBUG/AndroidRuntime(708): Shutting down VM
11-03 12:35:55.213: WARN/dalvikvm(708): threadid=3: thread exiting with uncaught exception (group=0x4000fe70)
11-03 12:35:55.213: ERROR/AndroidRuntime(708): Uncaught handler: thread main exiting due to uncaught exception
11-03 12:35:55.254: ERROR/AndroidRuntime(708): java.lang.RuntimeException: Unable to start activity ComponentInfo{android.com/android.com.Level3}: android.view.InflateException: Binary XML file line #7: Error inflating class java.lang.reflect.Constructor
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2268)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2284)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.app.ActivityThread.access$1800(ActivityThread.java:112)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1692)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.os.Handler.dispatchMessage(Handler.java:99)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.os.Looper.loop(Looper.java:123)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.app.ActivityThread.main(ActivityThread.java:3948)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at java.lang.reflect.Method.invokeNative(Native Method)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at java.lang.reflect.Method.invoke(Method.java:521)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at dalvik.system.NativeStart.main(Native Method)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class java.lang.reflect.Constructor
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.view.LayoutInflater.createView(LayoutInflater.java:512)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:562)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.view.LayoutInflater.rInflate(LayoutInflater.java:617)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:309)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.app.Activity.setContentView(Activity.java:1626)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.com.Level3.onCreate(Level3.java:19)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1123)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2231)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): ... 11 more
11-03 12:35:55.254: ERROR/AndroidRuntime(708): Caused by: java.lang.reflect.InvocationTargetException
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.widget.ImageView.<init>(ImageView.java:103)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at java.lang.reflect.Constructor.constructNative(Native Method)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at java.lang.reflect.Constructor.newInstance(Constructor.java:446)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.view.LayoutInflater.createView(LayoutInflater.java:499)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): ... 22 more
11-03 12:35:55.254: ERROR/AndroidRuntime(708): Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:363)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:212)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:663)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.content.res.Resources.loadDrawable(Resources.java:1637)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.content.res.TypedArray.getDrawable(TypedArray.java:548)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): at android.widget.ImageView.<init>(ImageView.java:113)
11-03 12:35:55.254: ERROR/AndroidRuntime(708): ... 26 more
Run Code Online (Sandbox Code Playgroud)

如果我先点击任何一个按钮并进入水平图,它会在我看着imageswitcher图片时崩溃.

在logcat中

11-03 09:17:34.308: INFO/ActivityManager(564): Starting activity: Intent { action=android.com.M615 comp={android.com/android.com.M615_gallery} }
11-03 09:17:34.638: ERROR/dalvikvm-heap(712): 212800-byte external allocation too large for this process.
11-03 09:17:34.638: ERROR/(712): VM won't let us allocate 212800 bytes
11-03 09:17:34.638: DEBUG/AndroidRuntime(712): Shutting down VM
11-03 09:17:34.648: WARN/dalvikvm(712): threadid=3: thread exiting with uncaught exception (group=0x4000fe70)
11-03 09:17:34.648: ERROR/AndroidRuntime(712): Uncaught handler: thread main exiting due to uncaught exception
11-03 09:17:34.677: ERROR/AndroidRuntime(712): java.lang.OutOfMemoryError: bitmap size exceeds VM budget
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:363)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:212)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:663)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.content.res.Resources.loadDrawable(Resources.java:1637)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.content.res.Resources.getDrawable(Resources.java:535)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.widget.ImageView.resolveUri(ImageView.java:482)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.widget.ImageView.setImageResource(ImageView.java:268)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.com.M615_gallery$AddImgAdp.getView(M615_gallery.java:71)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.widget.Gallery.makeAndAddView(Gallery.java:754)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.widget.Gallery.fillToGalleryRight(Gallery.java:703)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.widget.Gallery.layout(Gallery.java:634)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.widget.Gallery.onLayout(Gallery.java:339)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.view.View.layout(View.java:6133)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:998)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.widget.LinearLayout.onLayout(LinearLayout.java:918)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.view.View.layout(View.java:6133)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.view.View.layout(View.java:6133)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1119)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:998)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.widget.LinearLayout.onLayout(LinearLayout.java:918)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.view.View.layout(View.java:6133)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.widget.FrameLayout.onLayout(FrameLayout.java:333)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.view.View.layout(View.java:6133)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.view.ViewRoot.performTraversals(ViewRoot.java:929)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.view.ViewRoot.handleMessage(ViewRoot.java:1482)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.os.Handler.dispatchMessage(Handler.java:99)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.os.Looper.loop(Looper.java:123)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at android.app.ActivityThread.main(ActivityThread.java:3948)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at java.lang.reflect.Method.invokeNative(Native Method)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at java.lang.reflect.Method.invoke(Method.java:521)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
11-03 09:17:34.677: ERROR/AndroidRuntime(712): at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)

真的很感激,如果有人可以提供帮助......谢谢

PS:我在应用程序中有大量图像.我ImageSwitcher每个级别至少有5个画廊,所以在我的应用程序中有20多个图像处理器.

Dou*_*ugW 2

我必须在这里做一些猜测,因为您的命名和行号并不真正匹配。

例如,您有这一行:

startActivity(new Intent("android.com.Lvl4"));
Run Code Online (Sandbox Code Playgroud)

但您的活动名为“android.com.Level4”。当您将布局“tlevel4”称为“level4.xml”时,您正在膨胀布局“tlevel4”。另外,您粘贴的错误适用于 Level3。也许它们很相似,但行号很重要,所以最好发布相同的错误和类。

我并不是想挑剔,这些细节只是在尝试破译您不熟悉的代码时产生很大的不同。

无论如何,在这种情况下,我认为发生的事情已经很清楚了。

错误 1 ​​和 2 这两个错误都是内存不足异常。在这两种情况下,您都要求操作系统为您提供内存来加载一些大型资源,而操作系统只是告诉您您已经受够了。如果您发现这种情况持续发生,则几乎可以肯定您在某处泄漏了内存。您提到广泛使用可绘制对象。您要非常小心地处理这些内容,因为当您将可绘制对象添加到视图时,它会保留对视图的引用...它具有对 Context 的引用。我在您发布的代码中没有看到任何明显的明显内容,但我敢打赌您有某种上下文泄漏。阅读这篇文章,看看他们谈论的任何内容是否引起您的注意。

另外,我注意到您的包名称是 android.com (即 android.com.Lvl3)。也许您只是为了发布而编辑了此内容,但它实际上应该以 com 开头,即 com.yourProjectName.Lvl3。

哦,请不要这样做:

startActivity(new Intent("android.com.Android"));
Run Code Online (Sandbox Code Playgroud)

只需调用 this.finish();