listview加载性能优化及有多种listitem布局处理方式
2015-06-24 10:12
375 查看
转自:http://www.apkbus.com/forum.php?mod=viewthread&tid=243402
在Android开发中 Listview是一个很重要的组件 ,它以列表的形式根据数据的长自适应展示具体内容。
用户可以自由的定义listview每一列的布局,但当listview有大量的数据需要加载的时候,会占据大量内存,影响性能,这时候就需要按需填充并重新使用view来减少对象的创建。
ListView加载数据都是在
[Java] 纯文本查看 复制代码
?
方法中进行的(要自定义listview都需要重写listadapter:如 BaseAdapter,SimpleAdapter,CursorAdapter的等的getvView方法),
优化listview的加载速度 就要让 convertView匹配列表类型,并 最大程度上的重新使用convertView 。
其中,getview的加载方法一般有以下 三种 加载 方式:
1、最慢的加载方式是每一次都重新定义一个View载入布局,再加载数据
[Java] 纯文本查看 复制代码
?
2、正确的加载方式是当 convertView不为空 的时候直接重新使用convertView从而减少了很多不必要的View的创建,然后加载数据
[Java] 纯文本查看 复制代码
?
3、最快的方式是 定义一个ViewHolder ,将convetView的tag设置为ViewHolder,不为空时重新使用即可
[Java] 纯文本查看 复制代码
?
三种方式加载效率对比如下图所示:
说明:上述三个例子代码摘自google 2010 I/O大会
当处理一些耗时的资源加载的时候需要做到以下几点,以使你的加载更快更平滑:
1. 适配器在界面主线程中进行修改
2. 可以在任何地方获取数据但应该在另外一个地方请求数据
3. 在主界面的线程中提交适配器的变化并调用notifyDataSetChanged()方法
===============================分割线=========================================
那么如果 存在多个item样式 如何处理呢??
大致思路就是 创建多个viewholder,在getViewType的时候设置不同位置的item用不同的viewholder ,
以下直接上代码:
[Java] 纯文本查看 复制代码
?
在Android开发中 Listview是一个很重要的组件 ,它以列表的形式根据数据的长自适应展示具体内容。
用户可以自由的定义listview每一列的布局,但当listview有大量的数据需要加载的时候,会占据大量内存,影响性能,这时候就需要按需填充并重新使用view来减少对象的创建。
ListView加载数据都是在
[Java] 纯文本查看 复制代码
?
优化listview的加载速度 就要让 convertView匹配列表类型,并 最大程度上的重新使用convertView 。
其中,getview的加载方法一般有以下 三种 加载 方式:
1、最慢的加载方式是每一次都重新定义一个View载入布局,再加载数据
[Java] 纯文本查看 复制代码
?
[Java] 纯文本查看 复制代码
?
[Java] 纯文本查看 复制代码
?
说明:上述三个例子代码摘自google 2010 I/O大会
当处理一些耗时的资源加载的时候需要做到以下几点,以使你的加载更快更平滑:
1. 适配器在界面主线程中进行修改
2. 可以在任何地方获取数据但应该在另外一个地方请求数据
3. 在主界面的线程中提交适配器的变化并调用notifyDataSetChanged()方法
===============================分割线=========================================
那么如果 存在多个item样式 如何处理呢??
大致思路就是 创建多个viewholder,在getViewType的时候设置不同位置的item用不同的viewholder ,
以下直接上代码:
[Java] 纯文本查看 复制代码
?
相关文章推荐
- SAP在物流工作中的应用之学习笔记
- NSURLConnection文件上传
- 分享一个自己写的基于TP的关系模型(2)
- 一个丝滑的全屏滑动返回手势
- 用户掩码umask
- untiy之屏幕截图各种方式
- git使用ssh密钥
- iOS TextField设置大全
- API的设计与实现
- 关于写接口 FastJson 输出json结果集 大小写问题
- gpio matrix keypad linux driver
- 数据结构 - 图的数组存储
- 如何能让英语水平在一年半载内得到大幅提升?(备注下)
- Swift项目兼容Objective-C问题汇总
- ecshop 完美解决动态ip登录超时和购物车清空问题
- Ubuntu快捷键 终端快捷键
- Eclipse显示行号
- 关于SAP物流和供应链模块发展的一点思考
- [android]深入理解findViewById原理
- 实现一个JavaScript模块化加载器