title: Release Memory of Particular Activity when it is Destroyed
body: <p>I have a launcher <code>Activity</code> that load and resize big bitmap as it's background when it opens.</p>
  
  <p>Whenever hit the back button, the <code>Activity</code> is <code>destroyed</code>. But I think the memory is not released yet. </p>
  
  <p>When I open back the app, hit the back button and open it again (repeatedly), I will get a <code>OutOfMemoryError</code>.</p>
  
  <p>I am sorry for this newbie question but I am wondering <strong>how do I release the memory whenever an <code>Activity</code> is <code>destroyed</code>?</strong></p>
  
  <pre><code>@Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_welcome);
  
      //MARK - movingBackgroundImageView
      movingBackgroundImageView = (ImageView) findViewById(R.id.movingBackgroundImageView);
      movingBackgroundImageView.setColorFilter(Color.argb(255, 255, 255, 255));
      movingBackgroundImageView.setScaleType(ImageView.ScaleType.MATRIX);
      movingBackgroundImageView.setAlpha(0.28f);
  
      prepareBackgroundAnimation();
  }
  
  private void prepareBackgroundAnimation() {
  
      DisplayMetrics displaymetrics = new DisplayMetrics();
      getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
  
      screenWidth = displaymetrics.widthPixels;
      screenHeight = displaymetrics.heightPixels;
  
      movingImageHeight = displaymetrics.heightPixels;
      movingImageWidth = 1920.0 / 1080.0 * movingImageHeight;
  
      bitmapImage = BitmapFactory.decodeResource(this.getResources(), R.drawable.moving_background_image);
      scaledBitmap = bitmapImage.createScaledBitmap(bitmapImage, (int) movingImageWidth, (int) movingImageHeight, false);
      movingBackgroundImageView.setImageBitmap(scaledBitmap);
  
      backgroundImageInBeginning = true;
  
      movingBackgroundImageView.post(new Runnable() {
          @Override
          public void run() {
              movingBackgroundImageView.setImageMatrix(matrix);
              moveBackground();
          }
      });
  }
  </code></pre>
  
  <blockquote>
    <p>12-22 13:44:49.549 30885-30885/? E/AndroidRuntime: FATAL EXCEPTION: main
            Process: id.testingapp.android.TestingApp, PID: 30885
            java.lang.OutOfMemoryError: Failed to allocate a 26211852 byte allocation with 14018312 free bytes and 13MB until OOM
            at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
            at android.graphics.Bitmap.nativeCreate(Native Method)
            at android.graphics.Bitmap.createBitmap(Bitmap.java:939)
            at android.graphics.Bitmap.createBitmap(Bitmap.java:912)
            at android.graphics.Bitmap.createBitmap(Bitmap.java:843)
            at android.graphics.Bitmap.createScaledBitmap(Bitmap.java:719)
            at id.testingapp.android.TestingApp.WelcomeActivity.prepareBackgroundAnimation(WelcomeActivity.java:140)
            at id.TestingApp.android.TestingApp.WelcomeActivity.onCreate(WelcomeActivity.java:72)
            at android.app.Activity.performCreate(Activity.java:6283)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2646)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2758)
            at android.app.ActivityThread.access$900(ActivityThread.java:177)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1448)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:145)
            at android.app.ActivityThread.main(ActivityThread.java:5942)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)</p>
  </blockquote>
  
  <p><strong>EDIT:</strong></p>
  
  <p>I have tried to put all these in <code>onDestroyed()</code> but the problem persists</p>
  
  <pre><code>@Override
  protected void onDestroy() {
      finish();
      bitmapImage = null;
      scaledBitmap = null;
      super.onDestroy();
      Runtime.getRuntime().gc();
      System.gc();
  }
  </code></pre>