GCがとまらない

Source

package jp.tomorrowkey.android.dekoimageviewer;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.BaseColumns;
import android.provider.MediaStore.Images.Media;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.AdapterView.OnItemClickListener;

public class MainActivity extends Activity implements OnItemClickListener {

  private GridView gridView;
  private ArrayList<Uri> items;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    final String[] projection = { BaseColumns._ID };
    final String selection = Media.MIME_TYPE + "=? AND " + Media.SIZE + " <= ?";

    Cursor c = managedQuery(Media.EXTERNAL_CONTENT_URI, projection, selection, new String[] { "image/gif", "92160" }, null);

    items = new ArrayList<Uri>();
    while (c.moveToNext()) {
      items.add(Uri.parse(Media.EXTERNAL_CONTENT_URI + "/" + c.getString(0)));
    }
    c.close();

    gridView = (GridView) findViewById(R.id.gridView);
    gridView.setAdapter(new ImageAdapter());

    gridView.setOnItemClickListener(this);
  }

  @Override
  public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    Intent result = new Intent(null, items.get(position));
    setResult(RESULT_OK, result);
    finish();
  }

  public class ImageAdapter extends BaseAdapter {
    public ImageAdapter() {
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
      ImageView i;

      if (convertView == null) {
        i = new ImageView(MainActivity.this);
        i.setScaleType(ImageView.ScaleType.CENTER);
        i.setLayoutParams(new GridView.LayoutParams(50, 50));
      } else {
        i = (ImageView) convertView;
      }

      i.setImageURI(items.get(position));

      return i;
    }

    @Override
    public final int getCount() {
      return items.size();
    }

    @Override
    public final Object getItem(int position) {
      return items.get(position);
    }

    @Override
    public final long getItemId(int position) {
      return position;
    }
  }
}

解決

getViewにて毎回実行している

i.setImageURI(items.get(position));

が原因
メモリ食うけど、画像をキャッシュすることで解決します。