title: why my application use all memory and get OutOfMemoryError: Failed to allocate?
body: <p>why this happeing all the time?i dont have even a bitmap to recycle and i dont know why my application throw memory error.</p>
  
  <p>i select image from gallery here is the code to get an image from gallery then show it on some imageView.</p>
  
  <pre><code>@Override
  public void onActivityResult(int requestCode, int resultCode, Intent data) {
      ImageView b = (ImageView)  findViewById(R.id.viewImage);
      super.onActivityResult(requestCode, resultCode, data);
      if (resultCode == RESULT_OK) {
          if (requestCode == 1) {
              File f = new File(Environment.getExternalStorageDirectory().toString());
              for (File temp : f.listFiles()) {
                  if (temp.getName().equals("temp.jpg")) {
                      f = temp;
                      break;
                  }
              }
              try {
                  Bitmap bitmap;
                  BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
  
                  bitmap = BitmapFactory.decodeFile(f.getAbsolutePath(),
                          bitmapOptions);
  
                  b.setImageBitmap(bitmap);
  
                  String path = android.os.Environment
                          .getExternalStorageDirectory()
                          + File.separator
                          + "Phoenix" + File.separator + "default";
                  f.delete();
                  OutputStream outFile = null;
                  File file = new File(path, String.valueOf(System.currentTimeMillis()) + ".jpg");
                  try {
                      outFile = new FileOutputStream(file);
                      bitmap.compress(Bitmap.CompressFormat.JPEG, 85, outFile);
                      outFile.flush();
                      outFile.close();
                  } catch (FileNotFoundException e) {
                      e.printStackTrace();
                  } catch (IOException e) {
                      e.printStackTrace();
                  } catch (Exception e) {
                      e.printStackTrace();
                  }
              } catch (Exception e) {
                  e.printStackTrace();
              }
          } else if (requestCode == 2) {
  
              Uri selectedImage = data.getData();
              String[] filePath = { MediaStore.Images.Media.DATA };
              Cursor c = getContentResolver().query(selectedImage,filePath, null, null, null);
              c.moveToFirst();
              int columnIndex = c.getColumnIndex(filePath[0]);
              String picturePath = c.getString(columnIndex);
              c.close();
              Bitmap thumbnail = (BitmapFactory.decodeFile(picturePath));
              Log.w("path of image from gallery......******************.........", picturePath+"");
              b.setImageBitmap(thumbnail);
              b.setTag(picturePath);
  
          }
      }
  }
  </code></pre>
  
  <p>after that there is 3 imagebuttons below user image(which picked from gallery). when user press on each one of them will get the name of that imageView drawable and will send to another activity then i want to watermark user image on that Imagebutton and show in one imageView</p>
  
  <pre><code>private static HashMap&lt;Integer,String&gt; activityMap = new HashMap&lt;Integer,String&gt;();
  static {
      activityMap.put( R.id.agahi1,"agahi1");
      activityMap.put( R.id.agahi2,"agahi2");
  }
  // use this in the layout xml file for all the buttons onClick attribute
  public void Clicked( View vw ) {
      String a = String.valueOf(activityMap.get(vw.getId()));
  
      Intent i = new Intent(this,fotCreator.class);
  
      ImageView b = (ImageView)  findViewById(R.id.viewImage);
  
      String c = (String) b.getTag();
  
      i.putExtra("image",c);
      i.putExtra("frame",a);
      startActivity(i);
  }
  </code></pre>
  
  <p>this is the code for watermarker activity</p>
  
  <pre><code>    package net.svncorp.shadikade;
  
  import android.content.Intent;
  import android.content.res.Resources;
  import android.graphics.drawable.Drawable;
  import android.os.AsyncTask;
  import android.os.Bundle;
  import android.support.v7.app.ActionBarActivity;
  import android.view.Menu;
  import android.view.MenuItem;
  import android.view.View;
  import android.widget.ImageView;
  import android.widget.ProgressBar;
  
  
  public class fotCreator extends ActionBarActivity {
      private AsyncCaller myasync;
      private ProgressBar bar;
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_fot_creator);
          //progress bar
          bar = (ProgressBar) this.findViewById(R.id.progressBar);
  
  
          MainActivity.checkversion(this);
  
  
      }
      @Override
      public void onBackPressed() {
          super.onBackPressed();
          this.finish();
      }
      @Override
      protected void onResume() {
          super.onResume();
          myasync = new AsyncCaller();
          myasync.execute();
  
      }
  
      private class AsyncCaller extends AsyncTask&lt;Void, Void, Drawable&gt;
      {
  
  
  
          @Override
          protected void onPreExecute() {
              super.onPreExecute();
              bar.setVisibility(View.VISIBLE);
          }
          @Override
          protected Drawable doInBackground(Void... params) {
  
              try {            // simulate here the slow activity
                  Intent intent = getIntent();
  
                  final String frame = intent.getStringExtra("frame");
                  String image = intent.getStringExtra("image");
                  Resources resources = getResources();
                  int id = resources.getIdentifier(frame, "drawable", getPackageName());
                  Drawable d = resources.getDrawable(id);
                  return d;
  
  
              } catch (Exception e1) {
                  e1.printStackTrace();
              }
              return null;
          }
  
          @Override
          protected void onPostExecute(Drawable result) {
              super.onPostExecute(result);
  
              //this method will be running on UI thread
              ImageView finalimage = (ImageView)findViewById(R.id.finalimage);
              if (isCancelled() || result == null) {
                  return;
              }
              finalimage.setImageDrawable(result);
              bar.setVisibility(View.GONE);
  
          }
  
  
  
      }
  
  
      @Override
      protected void onPause() {
          super.onPause();
          myasync.cancel(true);
  
      }
  
      @Override
      public boolean onCreateOptionsMenu(Menu menu) {
          // Inflate the menu; this adds items to the action bar if it is present.
          getMenuInflater().inflate(R.menu.menu_fot_creator, menu);
          return true;
      }
  
      @Override
      public boolean onOptionsItemSelected(MenuItem item) {
          // Handle action bar item clicks here. The action bar will
          // automatically handle clicks on the Home/Up button, so long
          // as you specify a parent activity in AndroidManifest.xml.
          int id = item.getItemId();
  
          //noinspection SimplifiableIfStatement
          if (id == R.id.action_settings) {
              return true;
          }
  
          return super.onOptionsItemSelected(item);
      }
  
  
  
  }
  </code></pre>
  
  <p>now this code works so fast for 2 or 3 times of pressing imagebuttons and go to watermarker activty but its keep getting slower and slower and sometimes it freeze in emulator and i see these in logcat</p>
  
  <pre><code> 11-24 15:01:45.960    7751-7769/net.svncorp.shadikade I/art﹕ Alloc concurrent mark sweep GC freed 2419(163KB) AllocSpace objects, 1(1047KB) LOS objects, 12% free, 13MB/15MB, paused 0 total 30ms
  11-24 15:01:48.760    7751-7768/net.svncorp.shadikade I/art﹕ Clamp target GC heap from 17MB to 16MB
  11-24 15:01:48.760    7751-7768/net.svncorp.shadikade I/art﹕ Clamp target GC heap from 17MB to 16MB
  11-24 15:01:48.760    7751-7768/net.svncorp.shadikade I/art﹕ Forcing collection of SoftReferences for 1047KB allocation
  11-24 15:01:48.790    7751-7768/net.svncorp.shadikade I/art﹕ Alloc concurrent mark sweep GC freed 1303(86KB) AllocSpace objects, 1(993KB) LOS objects, 12% free, 13MB/15MB, paused 0 total 30ms
  11-24 15:01:53.700    7751-7751/net.svncorp.shadikade I/Choreographer﹕ Skipped 1272 frames!  The application may be doing too much work on its main thread.
  11-24 15:01:55.350    7751-7769/net.svncorp.shadikade I/art﹕ Clamp target GC heap from 17MB to 16MB
  11-24 15:01:55.350    7751-7769/net.svncorp.shadikade I/art﹕ Clamp target GC heap from 17MB to 16MB
  11-24 15:01:55.350    7751-7769/net.svncorp.shadikade I/art﹕ Forcing collection of SoftReferences for 993KB allocation
  11-24 15:01:55.380    7751-7769/net.svncorp.shadikade I/art﹕ Clamp target GC heap from 17MB to 16MB
  11-24 15:01:55.380    7751-7769/net.svncorp.shadikade I/art﹕ Alloc concurrent mark sweep GC freed 218(9KB) AllocSpace objects, 0(0B) LOS objects, 5% free, 15MB/16MB, paused 0 total 30ms
  11-24 15:01:55.380    7751-7769/net.svncorp.shadikade E/art﹕ Throwing OutOfMemoryError "Failed to allocate a 1017612 byte allocation with 954752 free bytes and 932KB until OOM"
  11-24 15:01:55.380    7751-7769/net.svncorp.shadikade D/skia﹕ --- decoder-&gt;decode returned false
  11-24 15:01:55.380    7751-7769/net.svncorp.shadikade E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #2
      Process: net.svncorp.shadikade, PID: 7751
      java.lang.RuntimeException: An error occured while executing doInBackground()
              at android.os.AsyncTask$3.done(AsyncTask.java:300)
              at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
              at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
              at java.util.concurrent.FutureTask.run(FutureTask.java:242)
              at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
              at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
              at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
              at java.lang.Thread.run(Thread.java:818)
       Caused by: java.lang.OutOfMemoryError: Failed to allocate a 1017612 byte allocation with 954752 free bytes and 932KB until OOM
              at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
              at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
              at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:609)
              at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444)
              at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:973)
              at android.content.res.Resources.loadDrawableForCookie(Resources.java:2423)
              at android.content.res.Resources.loadDrawable(Resources.java:2330)
              at android.content.res.Resources.getDrawable(Resources.java:758)
              at android.content.res.Resources.getDrawable(Resources.java:724)
              at net.svncorp.shadikade.fotCreator$AsyncCaller.doInBackground(fotCreator.java:65)
              at net.svncorp.shadikade.fotCreator$AsyncCaller.doInBackground(fotCreator.java:45)
              at android.os.AsyncTask$2.call(AsyncTask.java:288)
              at java.util.concurrent.FutureTask.run(FutureTask.java:237)
              at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
              at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
              at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
              at java.lang.Thread.run(Thread.java:818)
  </code></pre>
  
  <p>i think this is the problem of many others like me... Any help will be appreciated.</p>