您的位置:首页 > 移动开发 > Android开发

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测一下

然后说说预处理

Sample:

Feed类

FeedExtra类

再把数据加载入ListView之前,预处理好数据

再用ListViewTool去测,发现getView方法执行时间会大大降低。

优化:举一反三,将所有能够预处理的数据先处理好,减少重复工作,当数据量大时,预处理数据应异步处理。这也是优化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

六、使用RecyclerView替代ListView
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: