`
heisedeyueya
  • 浏览: 97710 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

ListView性能优化系列之一

阅读更多
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
分享到:
评论

相关推荐

    srollview与listview共存

    在Android开发中,ScrollView与ListView的共存是一个常见的需求,特别是在设计复杂...正确地计算和设置ListView的高度是解决这个问题的关键步骤之一。同时,也要注意性能优化,避免因不当的布局设计而带来的额外负担。

    一个支持listview的widget

    例如,ADW可能包含了如何优化ListView性能,以及如何处理Widget的点击事件等细节。 Launcher Plus源码则可能是对原生启动器的增强版,它可能提供了更多的定制选项和特性,包括对Widget的支持。通过学习这个源码,...

    android listview单击事件

    在Android开发中,ListView是应用最广泛的视图组件之一,尤其在展示大量数据时,它以列表形式高效地展示信息。本教程将深入探讨ListView的单击事件处理,以及如何在实际项目中实现这一功能。 首先,理解ListView的...

    Android应用源码ListView上下翻页效果.zip

    在Android应用开发中,ListView是常用的控件之一,它用于展示大量的列表数据,通常用于创建滚动列表。这个压缩包“Android应用源码ListView上下翻页效果.zip”包含了一个示例项目,展示了如何实现ListView的上下翻页...

    WPF中Listview应用事例,在ListView中放Gridview和Label或TextBlock

    3. **Data Binding**:在WPF中,数据绑定是核心特性之一,它让UI元素可以直接与数据源同步。在`ListView`中,我们通常会将`ItemsSource`属性绑定到一个数据集,如`ObservableCollection`或`BindingList`,然后通过`...

    ListView分页

    在Android中,ListView通常用于显示一系列可滚动的项目列表,而分页则是为了减少内存消耗和提高加载速度,避免一次性加载所有数据导致应用卡顿或内存溢出。 在ListView分页实现中,我们通常会结合使用Adapter类和...

    Android应用源码之listview 的各种动画效果_应用.zip

    6. **ListView滚动优化**:在处理大量数据时,ListView的滚动性能优化至关重要。通过使用ViewHolder模式可以复用已绘制的视图,避免频繁创建和销毁View,从而提高性能。 7. **ListView与RecycleView比较**:...

    安卓listview相关相关-Android-ListView监听上下滑动.rar

    在Android开发中,ListView是应用最广泛的控件之一,它用于显示大量的数据列表,并且可以进行滚动操作。这个“安卓listview相关相关-Android-ListView监听上下滑动.rar”压缩包可能包含了一些示例代码,教你如何在...

    listview+checkbox选中删除,全选,item点击

    2. **CheckBox**:CheckBox是Android UI组件之一,用于让用户选择一个或多个选项。在这里,CheckBox被添加到ListView的每个item中,以便用户可以选择他们想要操作的项。 3. **单选**:在ListView中实现单选通常需要...

    安卓listview相关相关-给图片添加水印这个是我自己写的上面是个listview.zip

    5. **性能优化**: 对于ListView,优化性能非常重要,因为可能会有大量数据。避免在`getView()`中执行耗时操作,如图片加载和水印添加,可以使用异步任务(AsyncTask)或者在后台线程完成。同时,利用ViewHolder...

    Android 水平ListView-IT计算机-毕业设计.zip

    在Android开发中,水平ListView(Horizontal ListView)是一种常见的布局组件,尤其在展示一系列横向滑动项目时非常实用。本项目是一个Android应用源码Demo,专为毕业设计学习而设计,可以帮助开发者深入理解如何在...

    listview的简单使用

    总之,ListView是Android开发中的基石之一,理解并熟练掌握其使用方法对构建高效的数据展示界面至关重要。通过阅读和实践ListViewTest项目中的代码,你将进一步加深对ListView和Adapter机制的理解。

    tabLayout与ViewPager联动嵌套listView

    首先,`TabLayout`是Google推出的Material Design组件之一,用于展示多个选项卡,每个选项卡代表一个不同的视图或内容区域。它提供了丰富的样式和交互效果,可以方便地与`ViewPager`进行配合,实现切换不同页面时...

    第四章:ListView使用技巧.md

    # 第四章:ListView使用技巧 ## 一、ListView简介及应用场景 ...随着移动应用的发展,尽管有 `RecyclerView` 等更先进的控件出现,但掌握 `ListView` 的使用仍然是每个 Android 开发者不可或缺的基础技能之一。

    理解面向对象的listView

    - 封装:面向对象的核心特性之一,隐藏对象内部的实现细节,只对外提供公共接口,以保护数据的安全性和完整性。 - 继承:一个类可以继承另一个类的属性和方法,实现代码的重用,形成类的层次结构。 - 多态:同一...

    Android之自定义Adapter的ListView

    在Android开发中,`ListView`是一种非常常见的UI控件,用于展示一系列的数据项列表。每个数据项可以是简单的文本或复杂的组合视图。为了使`ListView`能够正确地显示这些数据项,我们需要借助于一个名为`Adapter`的...

    Flutter的ListView滑动

    首先,我们需要理解`ListView`是Flutter中的一个核心组件,用于展示可滚动的一系列子项。它提供了流式布局,可以水平或垂直滚动,非常适合用于展示大量数据,如列表或网格。在创建`ListView`时,我们通常会传入一个`...

    Android应用源码之横向ListView的完整实现(包含基于横向listview做的一个小相册demo).zip

    RecyclerView提供了更多的灵活性和性能优化,比如它可以轻松地实现水平滚动。你需要创建一个自定义的LayoutManager,例如`LinearLayoutManager`的子类,并设置其布局方向为水平。 ```java RecyclerView ...

    listview3.5 源码

    ListView是Windows Forms应用程序中常用的控件,用于显示一系列数据项,可以以列表、缩略图或带有图表的格式...在实际开发中,了解并掌握ListView的各种特性和用法,是成为熟练的Windows Forms程序员的关键步骤之一。

Global site tag (gtag.js) - Google Analytics