我想开发像facebook应用程序那样的应用程序。 (**(即,)**在列表项上加载图像,文本,视频以及无限列表行)。这里我将在listview项目上显示采样图像(inSamplesize = 4)以减少堆大小的使用。
这次,滚动listview时堆大小会不断增加。我建议这是因为列表项中的图像对象没有被回收。如果堆大小不断增加,则可能发生OOM(Out Of Memory)异常的可能性。如何实现这一概念并确保OOM异常的可能性较小?
答案 0 :(得分:1)
确保在view holder
listview's
中使用adapter
模式:
http://www.javacodegeeks.com/2013/09/android-viewholder-pattern-example.html
或者做一些谷歌搜索,基本上所有应用都应该遵循这种模式。
答案 1 :(得分:0)
在listadapter的getView()中重用convertView应解决OOM异常。
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = mInflater.inflate(R.layout.yourlayout, null);
}
ImageView iv = (ImageView) convertView.findViewById(R.id.image);
iv.setImageResource(R.drawable.image);
return convertView;
}
使用上面的ViewHolder可以快速滚动
static class ViewHolder {
private ImageView imageView;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.yourlayout, null);
holder = new ViewHolder();
holder.imageView = (ImageView) convertView.findViewById(R.id.image);
convertView.setTag(holder);
}
else {
holder = (ViewHolder) convertView.getTag();
}
holder.ImageView.setImageResource(R.drawable.image);
return convertView;
}
答案 2 :(得分:0)
请勿使用非常大尺寸的图像,如果您在列表中显示图像仅用于拇指根据您的UI调整大小。 Android应用程序的执行只会少于20mb,因此使用大图像会超出可用内存。
并在清单的应用标记中添加 android:largeHeap="true"
。