GridView内存不足错误

时间:2010-06-03 13:48:02

标签: android memory gridview image

我使用GridView显示MediaStore的缩略图。 如果我启动并关闭我的应用程序2-3次,它会崩溃 记忆错误。 System.gc()在主要活动的onCreate中调用。 如果注释调用setImageURI则没有错误。 也许我需要以某种方式明确地清除记忆? 请帮忙。

   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;
   }

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分: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);
    }



}