ListView的优化

ListView的优化

ListView是Android中最常见也是最难用的控件,可以说现在市面上的Android应用都会包含ListView,因此掌握ListView对于Android开发来说是十分重要的。这里主要说一下ListView常见的几个优化的方向。

1、不进行优化:
每次getView()的时候都会执行

View view = View.inflate(mContext,R.layout.item,null);

问题:效率太低,在快速滑动的时候会造成卡顿,数据量比较大的时候会造成内存溢出,感兴趣的小伙伴可以尝试一下用一个for循环往ListView中添加几百条数据,然后快速的上下滑动,这时候程序很容易就会以为内存溢出的问题导致崩溃。

2、一级优化:复用converview

if(converterView==null) {
    converterView = View.inflate(mContext,R.layout.item,null);  //n+1
 }

问题: 每次执行getView()都需要执行converterView.findViewById()得到子View

3、二级优化:使用ViewHolder, 减少findViewById()的次数

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder viewHolder;
    if(convertView == null){
        convertView = View.inflate(mContext, R.layout.ui_adapter,null);
        viewHolder = new ViewHolder();
        viewHolder.iv = (ImageView) convertView.findViewById(R.id.iv_ui_adapter);
        viewHolder.title = (TextView) convertView.findViewById(R.id.title_ui_adapter);
        viewHolder.content = (TextView) convertView.findViewById(R.id.content_ui_adapter);
        convertView.setTag(viewHolder);
    }else{
        viewHolder = (ViewHolder) convertView.getTag();
    }
    viewHolder.iv.setImageResource(R.mipmap.ic_launcher);
    viewHolder.title.setText(mList.get(position).getTitle());
    viewHolder.content.setText(mList.get(position).getContent());
    return convertView;
}

static class ViewHolder{
    private ImageView iv;
    private TextView title;
    private TextView content;
}

问题1: 对于联网获取列表数据, 如果包含图片数据,使用图片的三级缓冲技术: 第三级优化
问题2: 对于联网获取列表数据, 如果数据量太大,使用分页加载: 第四级优化

4、三级优化:图片的三级缓存

图片的三级缓存
一级缓存: 内存缓存, 缓存的是bitmap对象, 用Map<String, Bitmap>结构保存, key是url
二级缓存: 本地(sd卡)缓存, 缓存的是图片文件
三级缓存: 远程服务器缓存, 缓存的是图片文件, 在远程服务器上的应用中

5、四级优化:对数据列表进行分页加载显示
1)、通过Scroll监听listView.setonScrollListener(scrollListener), 当到达底部时加载下一页列表数据并显示
2)、使用第三方开源框架: Android-PullToRefresh

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值