Android

浅谈ListView性能优化

2015-08-09  本文已影响356人  HuDP

很多小伙伴可能一看标题...啥ListView 这个早过时了的东西好不好,没关系即使使用RecyclerView 思路都是想通的。

为什么写这篇文章?因为重要嘛!实际开发中,列表类控件用的比较频繁,而且也容易出问题。so...咱们开始吧!

  1. 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;
    }
  1. 点击事件监听器不写在getView里面,为了减少回调接口的对象数量(实现起来有问题);

  2. 使用LruCache和DiskLruCache对网络图片进行缓存,避免重复的网络请求;
    这部分内容可以采用ImageLoader,不过建议去了解里面的具体实现,我们不重复造轮子,但是很有必要知道轮子是如何造的。

  3. 显示需要显示的那部分图片;此话怎讲?就是给ImageView设置图片的时候,只对当前已显示的这部分ImageView进行设置;

  4. 图片根据图片控件大小压缩显示,可以查看博主的另一篇博客 Bitmap的加载和Cache

有任何建议与疑问,欢迎留言交流或者Email:mox113@foxmail.com

上一篇下一篇

猜你喜欢

热点阅读