Android篇 ListView 优化笔记
2015-11-26 21:15
344 查看
优化listview,总结起来有一下六点:
1.优化列表事务线;
2.预处理数据;
3.在getView方法中,避免创建大量的对象;
4.优化图片的加载;
5.优化布局;
6.使用RecyclerView替代ListView;
接下来我会简单地对以上六点进行解释。
一、优化列表事务线
这个图是基于这个类绘制
1.首先bus启动,加载缓存
2.加载成功,把数据载入列表,做初始化工作;加载失败则直接做初始化工作。
3.初始化工作包括初始化ListView,初始化适配器,开始请求数据。
4.数据获取成功,预处理数据
5.然后是常规的刷新,加载循环。
6.保存缓存。
7.bus终止
优化:在标红的阶段异步处理
二、预处理数据
首先我们需要一个评估工具,来对我们做的工作评估。
这个工具类很好理解,就是ListView getView方法执行 的时间。
何为预处理数据?预处理数据就是在真正使用数据之前,对数据进行预先加工。
比如这条动态有个字段存储了点赞人的id,然后我们可能会调用
用ListviewTool测一下
然后说说预处理
FeedExtra类
再把数据加载入ListView之前,预处理好数据
再用ListViewTool去测,发现getView方法执行时间会大大降低。
优化:举一反三,将所有能够预处理的数据先处理好,减少重复工作,当数据量大时,预处理数据应异步处理。这也是优化ListView的关键。
三、在getView方法中,避免创建大量的对象
优化:
1.避免在在getView方法new 对象及使用view.setOnClickListener(new OnClickListener()),从而避免创建大量的对象。
2.使用ViewHolder模式
四、优化图片的加载
图片优化方面,多会使用框架,我以UniversalImageloader为例。
这是我的UIL配置
优化:
1.
.threadPoolSize(3)
.threadPriority(Thread.NORM_PRIORITY - 2)
这两个数据不宜设置过大,否则可能会出现卡顿现象,原因是线程池size过大且线程优先级过大,会阻塞UI线程。
2.
mListView.setOnScrollListener(new PauseOnScrollListener(ImageLoader.getInstance(), false, false));
UIL中有这么一个类
com.nostra13.universalimageloader.core.listener.PauseOnScrollListener
可以控制ListView在Fling Scroll时候是否暂停加载图片
五、优化布局
优化:
1.尽可能的降低布局层次结构,减少嵌套layout
2.尽可能使Item的高度一定,不能保证的时候可使用ViewType
六、使用RecyclerView替代ListView
1.优化列表事务线;
2.预处理数据;
3.在getView方法中,避免创建大量的对象;
4.优化图片的加载;
5.优化布局;
6.使用RecyclerView替代ListView;
接下来我会简单地对以上六点进行解释。
一、优化列表事务线
这个图是基于这个类绘制
2.加载成功,把数据载入列表,做初始化工作;加载失败则直接做初始化工作。
3.初始化工作包括初始化ListView,初始化适配器,开始请求数据。
4.数据获取成功,预处理数据
5.然后是常规的刷新,加载循环。
6.保存缓存。
7.bus终止
优化:在标红的阶段异步处理
二、预处理数据
首先我们需要一个评估工具,来对我们做的工作评估。
何为预处理数据?预处理数据就是在真正使用数据之前,对数据进行预先加工。
比如这条动态有个字段存储了点赞人的id,然后我们可能会调用
然后说说预处理
Sample:
Feed类优化:举一反三,将所有能够预处理的数据先处理好,减少重复工作,当数据量大时,预处理数据应异步处理。这也是优化ListView的关键。
三、在getView方法中,避免创建大量的对象
sample:
1.避免在在getView方法new 对象及使用view.setOnClickListener(new OnClickListener()),从而避免创建大量的对象。
2.使用ViewHolder模式
四、优化图片的加载
图片优化方面,多会使用框架,我以UniversalImageloader为例。
这是我的UIL配置
1.
.threadPoolSize(3)
.threadPriority(Thread.NORM_PRIORITY - 2)
这两个数据不宜设置过大,否则可能会出现卡顿现象,原因是线程池size过大且线程优先级过大,会阻塞UI线程。
2.
mListView.setOnScrollListener(new PauseOnScrollListener(ImageLoader.getInstance(), false, false));
UIL中有这么一个类
com.nostra13.universalimageloader.core.listener.PauseOnScrollListener
可以控制ListView在Fling Scroll时候是否暂停加载图片
五、优化布局
优化:
1.尽可能的降低布局层次结构,减少嵌套layout
2.尽可能使Item的高度一定,不能保证的时候可使用ViewType
相关文章推荐
- android canvas详解
- android学习ScrollView的使用
- android-Fragment
- [Android学习笔记六] Toast 更长时间显示
- android deamon
- Android ListView只加载当前屏幕内的图片(解决list滑动时加载卡顿)
- Mac打开android api doc 慢解决办法
- Android 动画浅谈(二)
- Android adb.exe链接中断 The connection to adb is down, and a severe error has occured.
- Android中防止重复点击的小技巧
- Android asset raw 文件夹的区别深入解析
- Android:shape的使用详解(2)
- 用Kotlin开发Android应用(IV):定制视图和Android扩展
- 转: 加快Android编译速度
- 一个完整的猫眼程序
- android开发步步为营之85:RecyclerView简单使用
- Android xml ListView 的divider属性
- Androidのspinner控件使用
- Android之NDK开发 环境配置
- Android之自定义 ActionBar 上的菜单(Menu)文字颜色