美文网首页
ListView的优化

ListView的优化

作者: Summer_27d1 | 来源:发表于2018-05-12 15:48 被阅读0次

    第0层:
    不优化

           每次都会执行getView(),都会执行  convertView=View.inflate(R.layout.XXX);
    

    问题:效率太低,再快速滑动时会有卡顿,在数据多的时候甚至内存溢出

    第1层:
    复用convertView

    if(convertView==null){
    convertView=View.inflate(R.layout.XXX); //n+1
    }
    问题: 每次执行getview()都需要执行convertView.findViewByid()得到子view

    第二层:
    使用ViewHolder,减少findViewByid()的次数 减到n+1次
    ViewHolder holder=null;
    if(convertView==null){
    convertView=View.inflate(R.layout.XXX); //n+1
    holder=new ViewHolder();
    holder.imageView=(ImageView)convertView.findViewById(xxx);
    holder.textView=(TextView)convertView.findViewById(yyy);
    convertView.setTag(holder);
    }else{

    holder=(ViewHolder)convertView.getTag();
    }

    person p= data.get(position);//之前创建的类
    holder.imageView.setImageResource(p.getIco());
    holder.textView.setText(p.getName());

    static class ViewHolder(){
    ImageView imageView;
    TextView textView;
    }
    问题1:
    对于联网获取列表数据,如果数据量太大(比如超过100000)条甚至更多一次取出来显示,太慢太消耗流量
    问题2.对于联网获取列表数据,如果包含图片数据,每次请求获取显示,太慢太耗流量
    第三层:
    图片三级缓存处理(LRu算法)
    1.内存缓存,优先加载,速度最快
    2.本地缓存,次优先加载。速度稍快
    3.网络缓存,最后加载,速度由网络速度决定(浪费流量)

    第4层:
    对数据列表进行分页加载显示
    1.自己做:通过Scroll监听
    listView。setOnScrollListener(scrollListenter),当到达底部时加载下一页列表数据并显示
    2.使用第三方开源框架:Aandroid-PullToRefresh或其他

    相关文章

      网友评论

          本文标题:ListView的优化

          本文链接:https://www.haomeiwen.com/subject/onxhdftx.html