文章目录
- 一、ListView卡顿的原因
- 1.1 Item没有复用
- 1.2 布局的层级过深
- 1.3 数据绑定逻辑过多
- 1.4 滑动时不必要的图片刷新
- 1.5 频繁的notifyDataSetChanged
 
- 二、优化策略
- 2.1 使用 ViewHolder 进行视图复用
- 2.2 优化布局结构
- 2.3 优化数据绑定逻辑过多
- 2.4 图片加载优化
- 2.5 避免频繁调用 notifyDataSetChanged
- 2.6 异步加载数据
- 2.7 使用分页加载
- 2.8 部分场景下,固定ListView的高度
- 2.9 使用 RecycleView 代替listview
 
一、ListView卡顿的原因
导致ListView卡顿的原因有很多,主要包括:Item没有复用、层级过深、数据绑定逻辑过多、滑动时不必要的图片刷新以及频繁的notifyDataSetChanged。
1.1 Item没有复用
ListView的Item没有复用是导致卡顿的常见原因。
在滑动的过程中,有些Item离开屏幕,有些Item需要进入屏幕。
离开屏幕的Item一般会加入到缓存容器中,而不是让item直接被GC的回收。如果有缓存,那么滑动进入屏幕的Item会优先从缓存容器中读取。
读取到的缓存会通过给convertView赋值来更新UI。
如果没有复用的item,那么之后每次都会重新创建这些Item,也就是通过LayoutInflater进行Item的创建,LayoutInflater创建Item是采用反射去解析xml,因此是比较耗费时间的,这就会带来性能损耗。
1.2 布局的层级过深
布局的层级过深是非常容易引起