Android之ListView性能优化
来源:互联网 发布:c语言高级编程 pdf 编辑:程序博客网 时间:2024/04/27 16:23
好久没搞博客了 最近一直在搞公司的jenkins,今天看了一下listview的优化,转载一下,经常更新
以下是转载:
ListView滚动速度优化主要可以应用以下几点方法来实现:
1、使用Adapter提供的convertView
convertView是Adapter提供的视图缓存机制,当第一次显示数据的时候,adapter会创建n个(n等于页面可见的item的数目)convertView,当下次需要显示新的item的时候,adapter会循环利用这些已经创建的convertView,减少再次创建convertView所带来的开销,从而达到性能的提升。
2、使用自定义的视图缓存类
就是自定义一个视图缓存类,在这个类中保存我们在item中使用到的视图的引用,通过convertView的setTag方法和getTag方法来存储这个视图缓存类引用和重新获取这个视图缓存类引用,其目的也是为了减少重复创建视图时的开销。
3、减少不必要的视图更新
ListView在滚动时会请求重新获取item,来显示不同内容的item,而如果在获取item时比较耗时就会造成在滚动时出现卡顿的现象。那我们可以通过监听ListView的滚动事件来使ListView处于不同的滚动状态时做不同的事情,比如在ListView处于滚动过程中加载少量的显示数据,当ListView处于空闲的状态时再加载所有的数据,这样就可以减少ListView在滚动过程中的开销,从而提供ListView的滚动速度。
以上的3种方法网上都有相应实现的例子,我这里不在赘述,提醒大家的是以下两种情况也会引起ListView滑动卡顿:
1、同步显示网络图片,或用弱引用的HashMap存储网络图片
2、非常蛋疼的情况,也是引起我写这篇文档主要原因,如果你定义的TextView的样式过于复杂,定义太多的属性(如android:ellipsize值为marquee),在你调用setText()方法时就会花费大量的时间。
附送一个ViewHolder简化代码
- public class ViewHolder {
- @SuppressWarnings("unchecked")
- public static <T extends View> T get(View view, int id) {
- SparseArray<View> viewHolder = (SparseArray<View>) view.getTag();
- if (viewHolder == null) {
- viewHolder = new SparseArray<View>();
- view.setTag(viewHolder);
- }
- View childView = viewHolder.get(id);
- if (childView == null) {
- childView = view.findViewById(id);
- viewHolder.put(id, childView);
- }
- return (T) childView;
- }
- }
使用举例
- TextView tv = ViewHolder.get(convertView, R.id.xxx);
- GridView gv = ViewHolder.get(convertView, R.id.xxx);
- ...
- Android之ListView性能优化
- Android之ListView性能优化
- Android之ListView性能优化
- Android之ListView性能优化
- [Android]ListView性能优化之视图缓存
- [Android]ListView性能优化之视图缓存
- [Android]ListView性能优化之视图缓存
- [Android]ListView性能优化之视图缓存
- Android ListView性能优化之视图缓存
- [Android]ListView性能优化之视图缓存
- [Android]ListView性能优化之视图缓存
- [Android]ListView性能优化之视图缓存
- [Android]ListView性能优化之视图缓存
- [Android]ListView性能优化之视图缓存
- [Android]ListView性能优化之视图缓存
- [Android]ListView性能优化之视图缓存
- Android性能优化之ListView缓存机制
- Android性能优化之ListView缓存机制
- 移动端旅游电商靠什么吸引了金主?
- Openstack I版 结合 Ceph 分布式存储 部署安装(四)
- 韩岩___第5课___《linux内核分析》MOOC课
- C#.net用QQ服务邮箱群发邮件
- 微信货源网—包括微信女装|微信女装批发|微信女装代理
- Android之ListView性能优化
- C 语言和C++语言的 struct对比
- Hibernate使用sql语句查询
- SpringMVC视图机制详解
- 第2章 算法基础-----排序算法
- linux huanchongqu yichu
- java -- 为什么我们需要实现hashCode和equals
- redis集群动态增加或者删除节点
- linux 重要目录讲解