Android-优化UI性能(2)-提高Adapter的效率
来源:互联网 发布:大数据好找工作吗 编辑:程序博客网 时间:2024/06/05 17:10
Android-优化UI性能(2)-提高Adapter的效率
一 提高Adapter的效率
Adapter是数据和ListView之间的桥梁,每当需要显示Item时,都会调用getView()
倘若我们的数据量很大,而Adapter的效率很低(每次都会调用inflate创建新的View,inflate(是一个IO操作)),这样界面就会很卡
例如在数据量比较大的时候使用下面的代码来getView()效率会很低:
public View getView(int p_position, View p_contentView, ViewGroup p_parent){ view _item = minflate.inflate(R.layout.list_item_icon_text, null); ((TextView)_item.findViewById(R.id.text)).setText(DATA[p_position]); ((ImageView)_item.findViewById(R.id.icon)).setImageBitmap((p_position & 1) == 1?micon1:micon2); return _item; }
1,重用已经生成的Item View
使用下面的代码效果会得到较好的提升
public View getView(int p_position, View p_contentView, ViewGroup p_parent) { //避免每一次都加载View,只在第一次建立View if (p_contentView == null) { p_contentView = minflate.inflate(R.layout.list_item_icon_text, null); } //已经加载了View,就直接得到数据即可 else if (p_contentView != null) { view _item = minflate.inflate(R.layout.list_item_icon_text, null); ((TextView)_item.findViewById(R.id.text)).setText(DATA[p_position]); ((ImageView)_item.findViewById(R.id.icon)).setImageBitmap((p_position & 1) == 1?micon1:micon2); return _item; } return _item; }
2,添加ViewHolder,
避免重复查找需要修改的控件,因为使用findViewById是一个很耗时的操作(需要遍历节点),我们可以使用ViewHolder进行缓冲,
这对于item的数据量很大或者item的布局很复杂的情况很有效
示例代码如下:
public View getView(int p_position, View p_contentView, ViewGroup p_parent) { ViewHolder _viewHolder; //第一次建立View,传出一个holder一共后面加载 if (null == p_contentView) { //加载组件视图 p_contentView = minflate.inflate(R.layout.list_item_icon_text, null); _viewHolder = new ViewHolder(); //加载组件 _viewHolder.mText = ((TextView)p_contentView.findViewById(R.id.text)); _viewHolder.mIcon = ((ImageView)p_contentView.findViewById(R.id.icon)); //设置tag p_contentView.setTag(_viewHolder); } else { //获取tag _viewHolder = (ViewHolder)p_contentView.getTag(); } //设置数据值 _viewHolder.mText.setText(Data[p_position]); _viewHolder.mIcon.setImageBitmap((p_position & 1) == 1 ? micon1:micon2); //返回 return p_contentView; } //缓冲类定义为static public static class ViewHolder { TextView mText; ImageView mIcon; }
3,缓存Item的数据
若缓冲Item中的数据需要很长的时间,可以在ViewHolder中缓存
示例代码如下:
public View getView(int p_position, View p_contentView, ViewGroup p_parent) { ViewHolder _viewHolder; //第一次建立View,传出一个holder一共后面加载 if (null == p_contentView) { //加载组件视图 p_contentView = minflate.inflate(R.layout.list_item_icon_text, null); _viewHolder = new ViewHolder(); //加载组件 _viewHolder.mText = ((TextView)p_contentView.findViewById(R.id.text)); _viewHolder.mIcon = ((ImageView)p_contentView.findViewById(R.id.icon)); //设置tag _viewHolder.mData = Data[p_position]; _viewHolder.mBitmap = (p_position & 1) == 1 ? micon1:micon2 ; p_contentView.setTag(_viewHolder); } else { //获取tag _viewHolder = (ViewHolder)p_contentView.getTag(); } //设置数据值 _viewHolder.mText.setText(Data_viewHolder.mData); _viewHolder.mIcon.setImageBitmap(_viewHolder.mBitmap); //返回 return p_contentView; } //缓冲类定义为了四个属性,你需要缓冲多少个就定义多少个 public static class ViewHolder { TextView mText; ImageView mIcon; Data mData; Bitmap mBitmap; }
4,分段显示
当加载很多数据的时候可以考虑分段显示。
0 0
- Android-优化UI性能(2)-提高Adapter的效率
- 【Android】提高Adapter的效率
- android的UI性能优化
- 优化php效率,提高php性能的一些方法
- 优化php效率,提高php性能的一些方法
- 优化php效率,提高php性能的一些方法
- 优化php效率,提高php性能的一些方法:
- Android中如何提高UI的性能
- Android中如何提高UI的性能
- Android中如何提高UI的性能
- Android中如何提高UI的性能
- QMUI Android UI 框架正式发布、提高 Android UI 开发效率的 UI 库
- Android UI性能优化
- android UI性能优化
- Android UI性能优化
- Android提高UI性能技巧
- 提高android应用的效率--主要讲解listview的优化
- 提高android应用的效率--主要讲解listview的优化
- liferay修改、去掉右上角控制面板等源码路径
- Linux网络编程 之 UDP 广播 .
- 面向对象(上)
- log4j2 按天分日志
- 前端工具网站
- Android-优化UI性能(2)-提高Adapter的效率
- Android把图片做成圆形的
- bochs调试操作系统
- Linux网络编程 之 UDP 组播实例
- webview相关
- iOS开发经验技巧之stringByReplacingCharactersInRange: withString: 實現字符串删除,替换
- C++ 编写延时循环 clock() CLOCKS_PER_SEC
- TCP/IP 组播编程
- Java基础日记———网路编程