ListView优化问题:
在adapter而中进行优化,adapter中:getCount列表长度,getView设置每一列View/ViewGroup(循环直到完成), 判断convertView == null
if (convertView == null) {
convertView = mInflater.inflate(R.layout.list_item_icon_text,
null);
}
使用静态内部类ViewHolder
if (convertView == null) {----------------->重用view,这样减少内存消耗,同时加快item加载速度
convertView = mInflater.inflate(R.layout.list_item_text,
null);
holder = new ViewHolder();
holder.text = (TextView) convertView.findViewById(R.id.text);----->findViewById会临时消耗更多的内存
convertView.setTag(holder); ---->这置setTag会占用更多内存
convertView = mInflater.inflate(R.layout.list_item_text,
null);
holder = new ViewHolder();
holder.text = (TextView) convertView.findViewById(R.id.text);----->findViewById会临时消耗更多的内存
convertView.setTag(holder); ---->这置setTag会占用更多内存
}
else{
holder = (ViewHolder)convertView.getTag();--->不用每次都要findViewById了,减少了性能的消耗。同时重用了convertView,很大程度上的减少了内存的消耗
}
else{
holder = (ViewHolder)convertView.getTag();--->不用每次都要findViewById了,减少了性能的消耗。同时重用了convertView,很大程度上的减少了内存的消耗
}
static class ViewHolder {---------------->静态类只会在第一次加载时会耗费比较长时间,但是后面就可以很好帮助加载,同时保证了内存中只有一个ViewHolder,节省了内存的开销
TextView text;
}
TextView text;
}
最大的问题还是图片处理,listview中显示图片,option保存图片大小,不将图片加载到内存,图片要进行压缩,使用弱引用(weakReference)储存图片信息(不是图片),获取图片,及时回收图片释放内存(dapater中尽量不使用线程,避免产生内存泄露问题(线程生命周期不可控))