私は冗長な質問を投稿するのが嫌いですが、ヒープ上にビットマップメモリをあまり持たない方法を私の人生では理解できません。最初のonCreateで完全に膨張しますが、2回目は失敗します。どこで/いつ私はこれらのものをリサイクルするのですか?リストビューの人口、ビットマップメモリリーク
私は基本的にビットマップの配列リストを使用しています。これをカスタム行レイアウトのアダプタに設定し、getViewをオーバーライドします。
**使用されているビットマップは、SDカードの// jpegです。//基本的に垂直スクロールするギャラリーです。
mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
setListAdapter(getAdapter());
}//on create
private ArrayAdapter<Bitmap> getAdapter(){
ArrayList<Bitmap> picsII = new ArrayList<Bitmap>();
String DIRECTORY_PATH = "/sdcard/Mustaches/";
File file = new File(DIRECTORY_PATH);
final String[] s = file.list();
for(int i = 0; i<s.length; i++){
Bitmap b = BitmapFactory.decodeFile(DIRECTORY_PATH + s[i]);
picsII.add(b);
}
adapter = new ArrayAdapter<Bitmap>(this, R.layout.row, picsII){
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row;
if (null == convertView) {
row = mInflater.inflate(R.layout.row, null);
} else {
row = convertView;
}
ImageView iv = (ImageView) row.findViewById(R.id.imageView_row);
iv.setImageBitmap(getItem(position));
//some other widgets such as buttons and textviews
//from the custom row are inflated here
return row;
}
};
return adapter;
};
エラーはOut of Memoryエラーですか? – Samuel
はい、outOfMemoryError:ビットマップがVM予算を超えています(heapSize = 5639 Allocated = 3052 bitmapSize = 27141) – kleaver