ListView的优化问题
listview算是我们app中较为常用的控件之一了。而如何优化也是一个问题。
listview的优化一般分为两类。
一布局优化。
对布局的优化是大家了解的。
1、复用convertview。android中界面上有多少个条显示,就会调用多少次的getView()方法,每次都会使用View.inflate(….)的方法,都要将xml文件解析,并显示到界面上,这是非常消耗资源的。
convertview会复用view。
2、viewholder的使用。findviewbyid()是一个耗时操作。在创建view对象的时候,减少布局文件转化成view对象的次数;即在创建view对象的时候,把所有孩子全部找到,并把孩子的引用给存起来
这样使用
if (convertView == null) { convertView = mInflater.inflate(R.layout.list_item_icon_text, null); holder = new ViewHolder(); 。。。。。 convertView.setTag(holder); } else{ holder = (ViewHolder)convertView.getTag(); } 。。。。 } class ViewHolder { }
二、数据优化
1、ListView中数据的分批分页处理
2、设置ListView的滚动监听器:setOnScrollListener(new OnScrollListener{….})
每次滑动时停止加载,静止时加载数据
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
switch (scrollState){
case SCROLL_STATE_TOUCH_SCROLL:
case SCROLL_STATE_FLING:
break;
case SCROLL_STATE_IDLE:
int start = listView.getFirstVisiblePosition();
int end = listView.getLastVisiblePosition();
if(end >= listView.getCount()){
end = listView.getCount() - 1;
}
//展示start-end之间的图片 blablabla......
break;
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
});
3、图片优化
在Bitmap加载之前进行设置,降低图片解码后的图片宽高尺寸,以及图像采样率,降低内存占用。可以使用google官方推荐的图片压缩算法。
图片解码的时候,降低像素颜色信息,从ARGB4字节,转换为Android支持的短字节颜色如ARGB565,去掉透明度。
异步加载图片,引入缓存机制。
三、更换使用recyclerview