Android性能优化-ListView优化
ListView的优化主要分为以下几点
ListView每次滚动都会调用 getView 方法,所以优化 getVieiw 是重中之重
convertView 是刚刚滚动出可见区域的View的引用,此时它已经不可见,所以应该被复用以减少View的创建
LayoutInflater.inflate(resourceId,View) 这个方法是用来通过pull的解析方式从XML文件生成一个View对象的,如果有成千上万
个Viwe都要去解析XML生成View,会非常消耗性能
viewHolder
findViewById这个方法是从ViewGroup的子View里面循环遍历找id与给出的ID相同的子View,还是比较耗时的,
图片加载顺序,应该为, 内存--本地--网络
主要写一下缓存到内存中的方法,
据说以前使用HashMap<String,SoftReference<BitMap>>的方法缓存,不过不好用了,现在大多都用
LruCache,
从网络加载图片或者本地加载图片都比较耗时,加上Android16ms的刷新UI频率,会造成卡顿
从内存获取速度相对较快,以上只是放入内存的方法,当然压缩什么的就没有写,只是简单介绍存入内存的原理
很多情况下ListView需要加载显示网络图片,我们尽量不要在ListView滑动的时候加载网络图片,
那样会使ListView变得卡顿所以我们要监听ListView的状态,如果ListView滑动( SCROLL_STATE_TOUCH_SCROLL )
或者猛滑( SCROLL_STATE_FLING )的时候,停止加载图片,否则加载图片
从用户的角度讲,快速滑动的时候,用户不需要看到当前内容
有时候出了 onItemClickListener 之外我们还会用到Item上其他位置的点击事件
一般情况下我们是在getView方法中,一个一个设置,就像
这样每个都设置了一个新的OnClickListener对象,不太好
直接在ViewHolder中设置一个position,然后viewHolder implements OnClickListener
然后再getView中设置的时候设置自己就行了
总之,宗旨就是少在getView里面new对象,做耗时操作
2024-03-16 广告