文章目录
- 一、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 布局的层级过深
布局的层级过深
是非常容易引起