我有一个应用程序可以将某些图像加载到网格视图中。问题是,在加载2或3张图像后,会出现以下错误:
E/dalvikvm-heap﹕ Out of memory on a 7056016-byte allocation.
我已阅读其他与Stackoverflow相关的问题,其中一些解决方案包括在Bitmap上使用.fit()和.resize()来解决此问题。
问题是,我直接从URL下载图像。
你能建议我解决这个OOM问题的方法吗?
干杯!
这是我的GridView适配器代码:
public class ImageAdapter extends BaseAdapter {
private Context mContext;
List<ParseObject> urlList;
private LayoutInflater inflater;
public ImageAdapter(Context c, List<ParseObject> urlList) {
mContext = c;
this.urlList = urlList;
inflater = LayoutInflater.from(c);
}
public int getCount() {
return urlList.size();
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View view, ViewGroup parent) {
View gridItem = view;
ViewHolder viewHolder;
if (gridItem == null) {
viewHolder = new ViewHolder();
gridItem = inflater.inflate(R.layout.grid_view_item, parent, false);
viewHolder.squareImageView = (SquareImageView) gridItem.findViewById(R.id.gridItem_squareImageView);
viewHolder.progressBar = (ProgressBar) gridItem.findViewById(R.id.gridItem_progressBar);
gridItem.setTag(viewHolder);
} else {
viewHolder= (ViewHolder) view.getTag();
}
Picasso.with(mContext).load(urlList.get(position).get("thumbnailURL").toString()).into(viewHolder.squareImageView);
viewHolder.progressBar.setVisibility(View.INVISIBLE);
return gridItem;
}
class ViewHolder {
SquareImageView squareImageView;
ProgressBar progressBar;
}
}
答案 0 :(得分:2)
试试这会占用更少的内存。在加载图像之前,它会调整大小
Picasso.with(mContext).
load(urlList.get(position).get("thumbnailURL").toString())
.resize(100,100)
.into(viewHolder.squareImageView);