2010-06-03 138 views
2

我使用GridView從MediaStore顯示縮略圖。 如果我啓動並關閉我的應用程序2-3次,它會崩潰,出現內存不足錯誤 。 System.gc()在主要活動的onCreate中被調用。 如果註釋調用setImageURI則沒有錯誤。 也許我需要明確地清除內存? 請幫忙。GridView內存不足錯誤

public View getView(int position, View convertView, ViewGroup parent){ 
      ImageView i; 
      if (convertView == null) { 
        i = new ImageView(activity.getApplicationContext()); 
        i.setLayoutParams(new GridView.LayoutParams(92, 92)); 
        i.setScaleType(ImageView.ScaleType.CENTER_CROP); 
      } else { 
        i = (ImageView) convertView; 
      } 
      Uri imageUri = thumbUri(position); 
      i.setImageURI(imageUri); // <--- no error if this string is commented 
      return i; 
    } 

回答

4

我知道了。我的解決方案基於Francesco的回答,但onPause而不是onDestroy。

@Override 
protected void onPause() { 
    GridView gridView = (GridView) findViewById(R.id.public_photos); 
    int count = gridView.getCount(); 
    for (int i = 0; i < count; i++) { 
     ImageView v = (ImageView) gridView.getChildAt(i); 
     if (v != null) { 
      if (v.getDrawable() != null) v.getDrawable().setCallback(null); 
     } 
    } 
    super.onPause(); 
} 
3

看來你是在其他地方泄漏記憶。 嘗試從您的ImageView像這樣的東西清除所有的回調:

@Override 
protected void onDestroy(){ 
    super.onDestroy(); 

    int count = gridView.getCount(); 
    for (int i = 0; i < count; i++){ 

     final ImageView v = (ImageView) gridView.getChildAt(i); 
     v.getDrawable().setCallback(null); 
    } 



} 
+0

沒有運氣。如何調試未發佈的資源? – Improver 2010-06-04 05:45:00

+0

您可以使用分配跟蹤器。將Exclipse切換到DDMS預期中,並且可以在那裏找到分配跟蹤器控制 – 2010-06-04 09:05:08