浅谈ListView性能优化
2015-08-09 本文已影响356人
HuDP
很多小伙伴可能一看标题...啥ListView 这个早过时了的东西好不好,没关系即使使用RecyclerView 思路都是想通的。
为什么写这篇文章?因为重要嘛!实际开发中,列表类控件用的比较频繁,而且也容易出问题。so...咱们开始吧!
- View重用,这个大部分博客都有提到
思路就是重用converView,使用ViewHolder 减少findViewById的次数;
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
ViewHolder holder;
// 如果convertView为空 则加载视图和控件
if (view == null) {
view = LayoutInflater.from(context).inflate(R.layout.item, null);
holder = new ViewHolder();
holder.tv_name = (TextView) view.findViewById(R.id.tv_name);
holder.tv_phone = (TextView) view.findViewById(R.id.tv_phoneNum);
view.setTag(holder);
} else { //如果不为空 则用getTag取出事前setTag的ViewHolder
holder = (ViewHolder) view.getTag();
}
Info info = InfoLists.get(position);
if (info != null) {
holder.tv_name.setText(info.getContactName());
holder.tv_phone.setText(info.getContact_Phone());
}
return view;
}
-
点击事件监听器不写在getView里面,为了减少回调接口的对象数量(实现起来有问题);
-
使用LruCache和DiskLruCache对网络图片进行缓存,避免重复的网络请求;
这部分内容可以采用ImageLoader,不过建议去了解里面的具体实现,我们不重复造轮子,但是很有必要知道轮子是如何造的。 -
显示需要显示的那部分图片;此话怎讲?就是给ImageView设置图片的时候,只对当前已显示的这部分ImageView进行设置;
-
图片根据图片控件大小压缩显示,可以查看博主的另一篇博客 Bitmap的加载和Cache
有任何建议与疑问,欢迎留言交流或者Email:mox113@foxmail.com