2013-06-19 52 views
0

我正在寫一個小型的android應用程序,它使用asyncTask來顯示來自Web服務的圖像。該代碼的作品,但它已被引起我的注意,我應該回收這個位圖。如何回收AsyncTask中的位圖? Android

我的問題是,有沒有辦法回收這個位圖後,我完成了使用它?

我嘗試了一個使用onStop()的解決方案,並且位圖沒有被回收或圖像根本不會顯示。

這裏是我的OnCreate

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     //Other unrelated things 
     Intent intent = getIntent(); 
     Bundle bundle = intent.getExtras(); 
     imageUrl = bundle.getString("imageUrl"); 
     displayImage(); 
    } 

這裏是我的AsyncTask

private void displayImage() { 
     new AsyncTask<String, Void, Bitmap>() { 
      protected Bitmap doInBackground(String... params) { 
       try { 
        return loadBitmap(params[0]); 
       } catch (Exception e) { 
        Logger.e(TAG, getString(R.string.error_loading_image_bitmap)); 
        return null; 
       } 
      } 

      protected Bitmap loadBitmap(String urlSpec) throws IOException { 
       InputStream is = new URL(urlSpec).openStream(); 
       try { 
        return BitmapFactory.decodeStream(is); 
       } finally { 
        is.close(); 
       } 
      } 

      protected void onPostExecute(Bitmap bitmap) { 
       if (bitmap != null) { 
        ImageView invoiceItemImageView = (ImageView) findViewById(R.id.some_id_here); 
        invoiceItemImageView.setImageBitmap(bitmap); 

       } 

      } 

     }.execute(imageUrl); 

    } 

回答

2

覆蓋方法View.onDetachedFromWindow()和回收您的Bitmap那裏。