ListView性能优化之一
不知不觉,都已经正式工作三个月了,这几天将工作中学习的知识进行一个小小的总结,ListView是android中一个非常常用的空间,下面就对ListView控件的性能优化做一点儿分享,由于内容相对有点儿多,我会分为几篇文章进行分享,希望对同学们有帮助,个人愚见,请保持怀疑的眼光阅读。
下集预告:这一小节从表面上讲了性能提高的方法,下一小节将从listview的源码中探寻convertView是如何被回收利用的
问题
- 当列表中有成千上万条记录的时候,如果每一条记录都去new 一个view的话,就会发生oom
解决问题:通过view的复用来解决这一问题,用户之需要关心在屏幕之内看得见的部分就可以了,所以不在屏幕中的部分可以回收利用。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.d(TAG, "position=" + position + ",convertView=" + convertView);
ViewHolder viewHolder = null;// 保存控件的引用,不用每次都调用findviewById(...)
if (convertView == null) {// 只有当convertView为空的时候,才去创建
convertView = LayoutInflater.from(mContext).inflate(
R.layout.list_item, null);// 这个过程相当耗时间
viewHolder = new ViewHolder();
viewHolder.mTextView = (TextView) convertView
.findViewById(R.id.tv_tips);
viewHolder.mImageView = (ImageView) convertView
.findViewById(R.id.iv_image);
convertView.setTag(viewHolder);
} else {// 利用回收回来的view
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.mTextView.setText("-----" + position);
return convertView;
}
class ViewHolder {
TextView mTextView;
ImageView mImageView;
}
综上:
1、因为不用每次调用getView的时候都inflate一个view出来,所以从速度上更快,并且内存也得到了优化。
2、由于通过ViewHolder保存了对控件的引用,不要每次都去调用findviewbyId(),也更加的方便快捷
日志分析
1、首先运行程序,观察日志输出
2、拖动listview,直到第一项完全消失在屏幕可见区域,神奇的事情发生了
3、继续拖动listView我想你应该明白了。。。
- 大小: 12.5 KB
- 大小: 18.3 KB
分享到:
相关推荐
在Android开发中,ScrollView与ListView的共存是一个常见的需求,特别是在设计复杂...正确地计算和设置ListView的高度是解决这个问题的关键步骤之一。同时,也要注意性能优化,避免因不当的布局设计而带来的额外负担。
例如,ADW可能包含了如何优化ListView性能,以及如何处理Widget的点击事件等细节。 Launcher Plus源码则可能是对原生启动器的增强版,它可能提供了更多的定制选项和特性,包括对Widget的支持。通过学习这个源码,...
在Android开发中,ListView是应用最广泛的视图组件之一,尤其在展示大量数据时,它以列表形式高效地展示信息。本教程将深入探讨ListView的单击事件处理,以及如何在实际项目中实现这一功能。 首先,理解ListView的...
在Android应用开发中,ListView是常用的控件之一,它用于展示大量的列表数据,通常用于创建滚动列表。这个压缩包“Android应用源码ListView上下翻页效果.zip”包含了一个示例项目,展示了如何实现ListView的上下翻页...
3. **Data Binding**:在WPF中,数据绑定是核心特性之一,它让UI元素可以直接与数据源同步。在`ListView`中,我们通常会将`ItemsSource`属性绑定到一个数据集,如`ObservableCollection`或`BindingList`,然后通过`...
在Android中,ListView通常用于显示一系列可滚动的项目列表,而分页则是为了减少内存消耗和提高加载速度,避免一次性加载所有数据导致应用卡顿或内存溢出。 在ListView分页实现中,我们通常会结合使用Adapter类和...
6. **ListView滚动优化**:在处理大量数据时,ListView的滚动性能优化至关重要。通过使用ViewHolder模式可以复用已绘制的视图,避免频繁创建和销毁View,从而提高性能。 7. **ListView与RecycleView比较**:...
在Android开发中,ListView是应用最广泛的控件之一,它用于显示大量的数据列表,并且可以进行滚动操作。这个“安卓listview相关相关-Android-ListView监听上下滑动.rar”压缩包可能包含了一些示例代码,教你如何在...
2. **CheckBox**:CheckBox是Android UI组件之一,用于让用户选择一个或多个选项。在这里,CheckBox被添加到ListView的每个item中,以便用户可以选择他们想要操作的项。 3. **单选**:在ListView中实现单选通常需要...
5. **性能优化**: 对于ListView,优化性能非常重要,因为可能会有大量数据。避免在`getView()`中执行耗时操作,如图片加载和水印添加,可以使用异步任务(AsyncTask)或者在后台线程完成。同时,利用ViewHolder...
在Android开发中,水平ListView(Horizontal ListView)是一种常见的布局组件,尤其在展示一系列横向滑动项目时非常实用。本项目是一个Android应用源码Demo,专为毕业设计学习而设计,可以帮助开发者深入理解如何在...
总之,ListView是Android开发中的基石之一,理解并熟练掌握其使用方法对构建高效的数据展示界面至关重要。通过阅读和实践ListViewTest项目中的代码,你将进一步加深对ListView和Adapter机制的理解。
首先,`TabLayout`是Google推出的Material Design组件之一,用于展示多个选项卡,每个选项卡代表一个不同的视图或内容区域。它提供了丰富的样式和交互效果,可以方便地与`ViewPager`进行配合,实现切换不同页面时...
# 第四章:ListView使用技巧 ## 一、ListView简介及应用场景 ...随着移动应用的发展,尽管有 `RecyclerView` 等更先进的控件出现,但掌握 `ListView` 的使用仍然是每个 Android 开发者不可或缺的基础技能之一。
- 封装:面向对象的核心特性之一,隐藏对象内部的实现细节,只对外提供公共接口,以保护数据的安全性和完整性。 - 继承:一个类可以继承另一个类的属性和方法,实现代码的重用,形成类的层次结构。 - 多态:同一...
在Android开发中,`ListView`是一种非常常见的UI控件,用于展示一系列的数据项列表。每个数据项可以是简单的文本或复杂的组合视图。为了使`ListView`能够正确地显示这些数据项,我们需要借助于一个名为`Adapter`的...
首先,我们需要理解`ListView`是Flutter中的一个核心组件,用于展示可滚动的一系列子项。它提供了流式布局,可以水平或垂直滚动,非常适合用于展示大量数据,如列表或网格。在创建`ListView`时,我们通常会传入一个`...
RecyclerView提供了更多的灵活性和性能优化,比如它可以轻松地实现水平滚动。你需要创建一个自定义的LayoutManager,例如`LinearLayoutManager`的子类,并设置其布局方向为水平。 ```java RecyclerView ...
ListView是Windows Forms应用程序中常用的控件,用于显示一系列数据项,可以以列表、缩略图或带有图表的格式...在实际开发中,了解并掌握ListView的各种特性和用法,是成为熟练的Windows Forms程序员的关键步骤之一。