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));
が原因
メモリ食うけど、画像をキャッシュすることで解決します。