listview
with imageとframelayout
(Containing Linearlayout
and button)を実装してlistview
いますが、上から下に何度もスクロールすると、しばらくするとアプリケーションがクラッシュしてエラーが発生します。
outofMemoryError。
listview
with imageとframelayout
(Containing Linearlayout
and button)を実装してlistview
いますが、上から下に何度もスクロールすると、しばらくするとアプリケーションがクラッシュしてエラーが発生します。
outofMemoryError。
Fedor が提供する素晴らしい回答として、問題を解決するには以下のようなことを行う必要があります。
OutOfMemoryを修正するには、次のようにする必要があります。
BitmapFactory.Options options=new BitmapFactory.Options();
options.inSampleSize = 8;
Bitmap preview_bitmap=BitmapFactory.decodeStream(is,null,options);
この inSampleSize オプションは、メモリ消費を削減します。
これが完全な方法です。最初に、コンテンツ自体をデコードせずに画像サイズを読み取ります。次に、最適な inSampleSize 値を見つけます。これは 2 のべき乗である必要があります。そして、最後に画像がデコードされます。
//decodes image and scales it to reduce memory consumption
private Bitmap decodeFile(File f){
try {
//Decode image size
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(new FileInputStream(f),null,o);
//The new size we want to scale to
final int REQUIRED_SIZE=70;
//Find the correct scale value. It should be the power of 2.
int scale=1;
while(o.outWidth/scale/2>=REQUIRED_SIZE && o.outHeight/scale/2>=REQUIRED_SIZE)
scale*=2;
//Decode with inSampleSize
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize=scale;
return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
} catch (FileNotFoundException e) {}
return null;
}
詳細については、こちらを参照してください。それがあなたを助けることを願っています。