これが私のコードです:
int[] image = {R.drawable.image1, R.drawable.image2, R.drawable.image1, R.drawable.image2,
R.drawable.image1, R.drawable.image2, R.drawable.image1, R.drawable.image2,
R.drawable.image1, R.drawable.image2, R.drawable.image1, R.drawable.image2,
R.drawable.image1, R.drawable.image2, R.drawable.image1, R.drawable.image2,
R.drawable.image1, R.drawable.image2, R.drawable.image1, R.drawable.image2,
R.drawable.image1, R.drawable.image2, R.drawable.image1, R.drawable.image2};
そして getView:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView=LayoutInflater.from(getApplicationContext()).inflate(R.layout.item, null);
ImageView imageView = (ImageView) convertView.findViewById(R.id.imageView);
imageView.setBackgroundResource(image[position]);
return convertView;
}
すべて順調。OOM なし。
次に、最初にドローアブルをサンプリングします。
public static Bitmap sampleImage(Context context, int resourceId, int sampleSize) {
Bitmap resizeBmp = null;
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inSampleSize = sampleSize;
resizeBmp = BitmapFactory.decodeResource(context.getResources(), resourceId, opts);
return resizeBmp;
}
そして新しい getView:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView=LayoutInflater.from(getApplicationContext()).inflate(R.layout.item, null);
ImageView imageView = (ImageView) convertView.findViewById(R.id.imageView);
Bitmap item = BitmapUtil.sampleMaskInShelf(getApplicationContext(), image[position], 4);
imageView.setImageBitmap(item);
// imageView.setBackgroundResource(image[position]);
return convertView;
}
事は起こった。最初は、アプリケーションはクラッシュしません。しかし、使用メモリが 50MB を超えているため、上下にスクロールすると OOM が発生します。
質問は次のとおりです。1)画像をサンプリングすると、使用されるメモリが増加する理由。2) メモリ使用量を減らす方法、他に方法はありますか?