2010-06-03 147 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