title: android - Out of memory Exception
body: <p>I develop one android app for book read. The Book pages and audios are download from Amazon Bucket. After downloading it stores on SD Card.</p>
  
  <p>I place to two button for next and previous pages. When I display pages It gives me Out of Memory Exception.</p>
  
  <pre><code>11-03 10:59:39.199: E/AndroidRuntime(13566): FATAL EXCEPTION: main
  11-03 10:59:39.199: E/AndroidRuntime(13566): java.lang.OutOfMemoryError
  11-03 10:59:39.199: E/AndroidRuntime(13566):    at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
  11-03 10:59:39.199: E/AndroidRuntime(13566):    at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:493)
  11-03 10:59:39.199: E/AndroidRuntime(13566):    at  android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:299)
  11-03 10:59:39.199: E/AndroidRuntime(13566):    at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:324)
  11-03 10:59:39.199: E/AndroidRuntime(13566):    at android.graphics.drawable.Drawable.createFromPath(Drawable.java:880)
  11-03 10:59:39.199: E/AndroidRuntime(13566):    at org.Infoware.childrenbible.GeneralHelper.setImgfromSDCard(GeneralHelper.java:608)
  11-03 10:59:39.199: E/AndroidRuntime(13566):    at org.Infoware.childrenbible.CoverPageActivity.onCreate(CoverPageActivity.java:205)
  11-03 10:59:39.199: E/AndroidRuntime(13566):    at android.app.Activity.performCreate(Activity.java:4465)
  11-03 10:59:39.199: E/AndroidRuntime(13566):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
  11-03 10:59:39.199: E/AndroidRuntime(13566):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920)
  11-03 10:59:39.199: E/AndroidRuntime(13566):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981)
  11-03 10:59:39.199: E/AndroidRuntime(13566):    at android.app.ActivityThread.access$600(ActivityThread.java:123)
  11-03 10:59:39.199: E/AndroidRuntime(13566):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147)
  11-03 10:59:39.199: E/AndroidRuntime(13566):    at android.os.Handler.dispatchMessage(Handler.java:99)
  11-03 10:59:39.199: E/AndroidRuntime(13566):    at android.os.Looper.loop(Looper.java:137)
  11-03 10:59:39.199: E/AndroidRuntime(13566):    at android.app.ActivityThread.main(ActivityThread.java:4424)
  11-03 10:59:39.199: E/AndroidRuntime(13566):    at java.lang.reflect.Method.invokeNative(Native Method)
  11-03 10:59:39.199: E/AndroidRuntime(13566):    at  java.lang.reflect.Method.invoke(Method.java:511)
  11-03 10:59:39.199: E/AndroidRuntime(13566):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
  11-03 10:59:39.199: E/AndroidRuntime(13566):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
  11-03 10:59:39.199: E/AndroidRuntime(13566):    at dalvik.system.NativeStart.main(Native Method)
  </code></pre>
  
  <p>Here It my Java Code:</p>
  
  <pre><code>public class PageReadActivity extends Activity 
  {
      Bitmap bitmap;
  
  @Override
  protected void onCreate(Bundle savedInstanceState) 
  {
          super.onCreate(savedInstanceState);
      try 
      {
          requestWindowFeature(Window.FEATURE_NO_TITLE);
          getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
          setContentView(R.layout.pageread_layout);
       } 
      catch (Exception ex) 
      {
          ex.printStackTrace();
          Log.d(TAG, "Error in onCreate");
      }
  }
  
    @Override
    protected void onStart() {
      // TODO Auto-generated method stub
      super.onStart();
      displayPage(product_code, page_Index);
  
        btnNext.setOnClickListener(new OnClickListener() {
  
              public void onClick(View v) {
                  // TODO Auto-generated method stub
                            page_Index = page_Index + 1;
                   displayPage(product_code, page_Index);
  
              }
          });
  
         btnPrevious.setOnClickListener(new OnClickListener() {
  
              public void onClick(View v) {
                  // TODO Auto-generated method stub
               page_Index = page_Index - 1;
      displayPage(product_code, page_Index);
  
              }
          });
  
     }
  
        private void displayPage(String product_code, int ind) 
  {
      try 
      {
          String imageName = product_code + ind + ".jpg";
  
          String imgFilePath = objHelper.getFullFilePath(imageName);
  
          File imageFile = new File(imgFilePath);
  
          imgViewPage = new ImageView(myContext);
  
          if(imageFile.exists())
          {   
  
              bitmap = objHelper.decodeSampledBitmapFromResource(imageName,objHelper.screenWidth,objHelper.screenHeight);             
  
              imgViewPage.setImageBitmap(bitmap);
              bitmap = null;
  
              String audioName = product_code+"_audio" + ind + ".mp3";
              String audioFilePath = objHelper.getFullFilePath(audioName);
  
              File audioFile = new File(audioFilePath);
  
              if(audioFile.exists())
              {   
                  progressBarWaiting.setVisibility(View.INVISIBLE);
                  stopAudio();
                  playAudio(ind);
              }
  
          }
          else
          {
              System.out.println("Image not exists.....");
          }           
      } 
      catch (Exception ex) 
      {
          ex.printStackTrace();
          Log.e(TAG, "ERROR in displayPage");
      }
  }
  
      @Override
  protected void onDestroy() 
  {
      super.onDestroy();
      objHelper.unbindDrawables(findViewById(R.id.pageReadLayout));
      System.gc();
  }
  
      public void unbindDrawables(View view) 
  {
      if(view.getBackground() != null)
      {
          view.getBackground().setCallback(null);
      }
  
      if(view instanceof ViewGroup &amp;&amp; !(view instanceof AdapterView))
      {
          for (int i = 0; i &lt; ((ViewGroup) view).getChildCount(); i++) 
          {
              unbindDrawables(((ViewGroup) view).getChildAt(i));
          }
  
          ((ViewGroup) view).removeAllViews();
      }
  }
  
      public Bitmap decodeSampledBitmapFromResource(String fileName,int reqWidth, int reqHeight) 
  {
  
      String imagePath = getFullFilePath(fileName);
  
      @SuppressWarnings("unused")
      File imgFile = new File(imagePath);
  
      // First decode with inJustDecodeBounds=true to check dimensions
      final BitmapFactory.Options options = new BitmapFactory.Options();
      options.inJustDecodeBounds = true;
      BitmapFactory.decodeFile(imagePath,options);
  
      // Calculate inSampleSize
      options.inSampleSize = 1;
  
      // Decode bitmap with inSampleSize set
      options.inJustDecodeBounds = false;
  
      return BitmapFactory.decodeFile(imagePath,options);
  }
     }
  </code></pre>