title: Android : java.lang.OutOfMemoryError:
body: <p>I developed an application that uses lots of images on Android.</p>
  
  <p>There are lots of images present in drawable folder say more then 100, I am developing application for animation of images. I used imageview to show GIF images. I have used the concept of Split gif images into multiple PNG format images and then use it. </p>
  
  <p>Each time the user enters to the app, I can see the memory growing more and more until user gets the <code>java.lang.OutOfMemoryError</code>.</p>
  
  <p>So what is the best/correct way to handle many images?</p>
  
  <p>Below is my code:</p>
  
  <p>dog_animation.xml</p>
  
  <pre><code>&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:id="@+id/DogView"
  android:orientation="vertical" &gt;
  
  &lt;ImageView
      android:id="@+id/dog_animation"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_weight="0.19" /&gt;
  </code></pre>
  
  <p></p>
  
  <p>dog_animation.xml (Drawable folder)</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  </code></pre>
  
  <p></p>
  
  <pre><code>&lt;item
      android:drawable="@drawable/image"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image1"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image2"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image3"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image4"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image5"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image6"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image7"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image8"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image9"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image10"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image11"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image12"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image13"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image14"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image15"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image16"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image17"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image18"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image19"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image20"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image21"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image22"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image23"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image24"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image25"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image26"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image27"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image28"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image29"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image30"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image31"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image32"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image33"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image34"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image35"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image36"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image37"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image38"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image39"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image40"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image41"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image42"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image43"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image44"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image45"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image46"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image47"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image48"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image49"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image50"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image51"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image52"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image53"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image54"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image55"
      android:duration="50"/&gt;
  &lt;item
      android:drawable="@drawable/image56"
      android:duration="50"/&gt;
  </code></pre>
  
  <p></p>
  
  <p>Dog_Animation.java</p>
  
  <pre><code>public class Dog_Animation extends Activity {
  
  Timer timer = new Timer();
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      requestWindowFeature(Window.FEATURE_NO_TITLE);
      getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
              WindowManager.LayoutParams.FLAG_FULLSCREEN);
      setContentView(R.layout.dog_animation);
  
      ImageView img = (ImageView) findViewById(R.id.dog_animation);
      img.setBackgroundResource(R.drawable.dog_animation);
      AnimationDrawable frameAnimation = (AnimationDrawable) img
              .getBackground();
      frameAnimation.start();
  
      timer.schedule(new TimerTask() {
          public void run() {
              Intent intent = new Intent(Dog_Animation.this,
                      Man_Animation.class);
              startActivity(intent);
          }
      }, 10000);
  }
  }
  </code></pre>
  
  <p>Now the problem is when i try to move from one activity to another which has same some other image to animate it's giving me error of <code>java.lang.OutOfMemory</code>.</p>
  
  <p>I have tried with so many different solution like</p>
  
  <pre><code>@Override
  protected void onDestroy() {
      super.onDestroy();
  
      unbindDrawables(findViewById(R.id.DogView));
      System.gc();
  }
  
  private void unbindDrawables(View view) {
      if (view.getBackground() != null) {
          view.getBackground().setCallback(null);
      }
      if (view instanceof ViewGroup) {
          for (int i = 0; i &lt; ((ViewGroup) view).getChildCount(); i++) {
              unbindDrawables(((ViewGroup) view).getChildAt(i));
          }
          ((ViewGroup) view).removeAllViews();
      }
  }
  </code></pre>
  
  <p>and so other also but any solution is not working for me. Please help me to solve this issue.  even i have referred <a href="http://androidactivity.wordpress.com/2011/09/24/solution-for-outofmemoryerror-bitmap-size-exceeds-vm-budget/">http://androidactivity.wordpress.com/2011/09/24/solution-for-outofmemoryerror-bitmap-size-exceeds-vm-budget/</a> this link but not getting solve the issue.</p>