【发布时间】:2016-09-01 13:38:41
【问题描述】:
您好,我正在尝试在 ListView 中显示一系列图像,但是当我运行应用程序时,它会耗尽内存,这很奇怪,因为昨晚测试它时它运行良好,今天早上返回它时它知道再想打球。我正在使用 ViewHolder 模式,我想知道是否有人能发现我的错误?
LiqAdapter
public class LiqAdapter extends ArrayAdapter<Liq_String> {
List<Liq_String> lstLiq;
LayoutInflater inflater;
public LiqAdapter(Context context, int resource, List<Liq_String> objects) {
super(context, resource, objects);
lstLiq = objects;
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
ViewHolderLiq viewholder;
if (view == null){
viewholder = new ViewHolderLiq();
view = inflater.inflate(R.layout.custom_winelist, null);
viewholder.liqImage = (ImageView) view.findViewById(R.id.wineImage);
viewholder.liqName = (TextView) view.findViewById(R.id.wineName);
viewholder.liqDes = (TextView) view.findViewById(R.id.wineDes);
viewholder.liqPrice = (TextView) view.findViewById(R.id.winePrice);
view.setTag(viewholder);
}else{
viewholder = (ViewHolderLiq) view.getTag();
}
Liq_String wine = lstLiq.get(position);
viewholder.setDataIntoViewHolderLiqueurs(wine);
return view;
}
}
查看器
public class ViewHolderLiq {
public ImageView liqImage;
public TextView liqName;
public TextView liqDes;
public TextView liqPrice;
public void setDataIntoViewHolderLiqueurs(Liq_String liqString){
liqImage.setImageResource(liqString.getIcon_liq());
liqName.setText(liqString.getLiqName());
liqDes.setText(liqString.getLiqdes());
liqPrice.setText(liqString.getLiqPrices());
}
}
错误
FATAL EXCEPTION: main
java.lang.OutOfMemoryError: Failed to allocate a 26620312 byte allocation with 4194304 free bytes and 11MB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:609)
at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444)
at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:1080)
at android.content.res.Resources.loadDrawableForCookie(Resources.java:2635)
at android.content.res.Resources.loadDrawable(Resources.java:2540)
at android.content.res.Resources.getDrawable(Resources.java:806)
at android.content.Context.getDrawable(Context.java:458)
at android.support.v4.content.ContextCompatApi21.getDrawable(ContextCompatApi21.java:26)
at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:321)
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:197)
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:190)
at android.support.v7.widget.AppCompatImageHelper.setImageResource(AppCompatImageHelper.java:66)
at android.support.v7.widget.AppCompatImageView.setImageResource(AppCompatImageView.java:71)
at wine.entity.ViewHolderLiq.setDataIntoViewHolderLiqueurs(ViewHolderLiq.java:20)
at wine.Adapter.LiqAdapter.getView(LiqAdapter.java:73)
【问题讨论】:
-
@Alexander 确实如此。
标签: android memory memory-leaks out-of-memory android-viewholder