大家好啊。
我试图制作一个产品目录,这就是我要做的:
我从网上下载产品数据和图像,并将图像存储到sdcard中。
但是我的应用程序不断崩溃,这就是错误
05-22 10:04:43.829: E/AndroidRuntime(12388): FATAL EXCEPTION: main
05-22 10:04:43.829: E/AndroidRuntime(12388): java.lang.OutOfMemoryError
05-22 10:04:43.829: E/AndroidRuntime(12388): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
05-22 10:04:43.829: E/AndroidRuntime(12388): at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:493)
05-22 10:04:43.829: E/AndroidRuntime(12388): at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:299)
05-22 10:04:43.829: E/AndroidRuntime(12388): at android.graphics.BitmapFactory.decodeFile(BitmapFactory.java:324)我在图片库适配器上的getView中使用de位图工厂,但当我滑动片段时,它就崩溃了。然后,我更改并创建并列出了主活动创建的时间,但是现在如果我关闭该活动并再次尝试打开它,它就会崩溃,如果我试图再次打开它,它就会正常打开。
我做错什么了?有更好的方法吗?
这是我的图片库适配器
public class ImagemAdapter extends BaseAdapter {
private Context ctx;
List<Bitmap> pics;
public ImagemAdapter(Context c, List<Bitmap> pics) {
ctx = c;
this.pics = pics;
}
@Override
public int getCount() {
return pics.size();
}
@Override
public Object getItem(int position) {
return pics.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
if(convertView == null){
int arquivoLayout = R.layout.adp_galeria;
LayoutInflater inflater = (LayoutInflater) ctx.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(arquivoLayout, null);
ImageView img = ((ImageView)convertView.findViewById(R.id.imgProd));
img.setImageBitmap(pics.get(position));
}
return convertView;
}
}另一件奇怪的事情是,适配器上的convertView总是空的。
编辑:
我认为问题在于位图保留在内存中。当调用片段的onCreateView时,我用应该显示的图像填充列表,当片段的onDestroyView被调用时,我会这样做:
for(int i =0; i< imagemBit.size(); i++){
Bitmap bmp = imagemBit.get(i);
bmp.recycle();
bmp = null;
}
imagemBit.clear();但是:当onCreateView再次被调用时(用户返回到上一页),当我尝试再次填充列表时,应用程序会崩溃,并出现OutOfMemory异常。
发布于 2013-05-22 19:58:25
在下载和显示内存中缓存的许多图像时,我也遇到了同样的问题。确保内存中不超过一定数量的图像(取决于大小)。
发布于 2013-05-22 13:50:03
你的应用程序在代码崩溃的地方?
我认为在你关闭你的应用程序后,'pics‘仍然保留对位图的引用,这就是为什么GC不发布位图的原因。您必须在应用程序停止时或在创建新位图之前发布位图。
https://stackoverflow.com/questions/16692952
复制相似问题