2010-08-13 27 views
1

朋友,這是回收位圖的合適方法嗎?

我有一個頁面,我從圖庫中顯示圖像,然後我有下一頁按鈕移動到該按鈕上的下一個活動,我使用clearBitmap(); 釋放它所使用的內存。

private Bitmap bitmap;

oncreate() 
{ 

_image = (ImageView)findViewById(R.id.MyImage); 

_path = getRealPathFromURI(_data.getData()); 


      BitmapFactory.Options options = new BitmapFactory.Options(); 


      options.inSampleSize = 2; 

      bitmap = BitmapFactory.decodeFile(_path, options); 

_image.setImageBitmap(bitmap); 


next.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View view) { 

      Intent myIntent = new Intent(UploadImageOnly.this, ImageGallery.class); 

         startActivity(myIntent); 

clearBitmap(); 




} 

這給了我錯誤 logcat的

08-13 12:07:07.649: ERROR/AndroidRuntime(753): Uncaught handler: thread main exiting due to uncaught exception 
08-13 12:07:07.869: ERROR/AndroidRuntime(753): java.lang.RuntimeException: Canvas: trying to use a recycled bitmap [email protected] 
08-13 12:07:07.869: ERROR/AndroidRuntime(753):  at android.graphics.Canvas.throwIfRecycled(Canvas.java:955) 
08-13 12:07:07.869: ERROR/AndroidRuntime(753):  at android.graphics.Canvas.drawBitmap(Canvas.java:1044) 
08-13 12:07:07.869: ERROR/AndroidRuntime(753):  at android.graphics.drawable.BitmapDrawable.draw(BitmapDrawable.java:323) 
08-13 12:07:07.869: ERROR/AndroidRuntime(753):  at android.widget.ImageView.onDraw(ImageView.java:845) 
08-13 12:07:07.869: ERROR/AndroidRuntime(753):  at android.view.View.draw(View.java:6535) 

代碼

public void clearBitmap() { 

     try{ 
      if(bitmap!=null && !bitmap.isRecycled()){ 
        bitmap.recycle(); 
        bitmap = null; 
      } 
      }catch(Throwable e){ 
        System.out.println(e.getMessage()); 
        e.printStackTrace(); 
      } 

      System.gc(); 

     } 

回答

0

就讓垃圾收集處理。您的情況下或在任何正常情況下都不需要使用Bitmap#recycle()

+0

好吧,如果我不這樣開放不同的圖像從畫廊一遍又一遍......我崩潰了內存異常。所以在這種情況下釋放內存是必要的。 – UMAR 2010-08-13 07:10:18

+0

然後你保持對你的位圖的引用,他們沒有被收回。 – Qberticus 2010-08-13 07:27:58

+0

那麼殺死它們的程序是什麼? – UMAR 2010-08-13 07:39:03