`
雪国列车
  • 浏览: 77009 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

listview加载性能优化

阅读更多

 

在android开发中Listview是一个很重要的组件,它以列表的形式根据数据的长自适应展示具体内容,用户可以自由的定义listview每一列的布局,但当listview有大量的数据需要加载的时候,会占据大量内存,影响性能,这时候就需要按需填充并重新使用view来减少对象的创建。

ListView加载数据都是在public View getView(int position, View convertView, ViewGroup parent) {}方法中进行的(要自定义listview都需要重写listadapter:如BaseAdapter,SimpleAdapter,CursorAdapter的等的getvView方法),优化listview的加载速度就要让convertView匹配列表类型,并最大程度上的重新使用convertView。

getview的加载方法一般有以下三种种方式:

最慢的加载方式是每一次都重新定义一个View载入布局,再加载数据

 

public View getView(int position, View convertView, ViewGroup parent) {

 View item = mInflater.inflate(R.layout.list_item_icon_text, null);

 ((TextView) item.findViewById(R.id.text)).setText(DATA[position]);

 ((ImageView) item.findViewById(R.id.icon)).setImageBitmap(

 (position & 1) == 1 ? mIcon1 : mIcon2);

 return item;

}

 

正确的加载方式是当convertView不为空的时候直接重新使用convertView从而减少了很多不必要的View的创建,然后加载数据

 

public View getView(int position, View convertView, ViewGroup parent) {

 if (convertView == null) {

 convertView = mInflater.inflate(R.layout.item, parent, false);

 }

 ((TextView) convertView.findViewById(R.id.text)).setText(DATA[position]);

 ((ImageView) convertView.findViewById(R.id.icon)).setImageBitmap(

 (position & 1) == 1 ? mIcon1 : mIcon2);

 return convertView;

 }

 

 

最快的方式是定义一个ViewHolder,将convetView的tag设置为ViewHolder,不为空时重新使用即可

 

static class ViewHolder {

TextView text;

ImageView icon;

}

 

public View getView(int position, View convertView, ViewGroup parent) {

 ViewHolder holder;

 

 if (convertView == null) {

 convertView = mInflater.inflate(R.layout.list_item_icon_text,

 parent, false);

 holder = new ViewHolder();

 holder.text = (TextView) convertView.findViewById(R.id.text);

 holder.icon = (ImageView) convertView.findViewById(R.id.icon);

 convertView.setTag(holder);

} else {

holder = (ViewHolder) convertView.getTag();

}

holder.text.setText(DATA[position]);

holder.icon.setImageBitmap((position & 1) == 1 ? mIcon1 : mIcon2);

return convertView;

}

分享到:
评论

相关推荐

    ListView性能优化之视图缓存

    ListView 的性能优化可以从多方面入手,包括 Adapter 的优化、视图缓存、数据加载优化等。其中,Adapter 的优化是 ListView 性能优化的关键所在。Google I/O 大会提供了多种优化 Adapter 的方案,包括使用 ...

    Listview的异步加载性能优化

    本篇文章将深入探讨ListView的异步加载性能优化,以及如何利用ViewHolder、图片缓存和异步加载策略来提升用户体验。 首先,ViewHolder模式是ListView性能优化的基础。这个模式的主要目的是减少对视图的查找和更新...

    listview加载多幅图片

    总之,ListView加载多幅图片涉及到ImageList的使用,图片的加载和存储策略,以及性能优化。通过合理的编程实践,可以创建出流畅且高效的图片展示效果。同时,理解并掌握这些知识点对于开发高质量的UI界面至关重要。

    Listview加载的性能优化是如何实现的

    以下是对ListView加载性能优化的详细讲解: **一、最原始的加载** 这是最基本的ListView加载方式,通常会遇到的问题是频繁地创建和销毁View对象。在未经优化的Adapter中,每次调用`getView()`方法都会通过...

    listview高级部分,性能优化的demo

    本示例“ListView高级部分,性能优化的demo”将深入探讨六个关键领域的优化策略,帮助开发者提升ListView的运行效率,提供更好的用户体验。 1. **ViewHolder模式**:这是ListView性能优化的核心。通过复用已创建的...

    Android ListView性能优化

    因此,对ListView进行性能优化至关重要。本文将详细介绍几个关键的优化策略。 1. 使用ViewHolder模式 ViewHolder模式是ListView优化的核心技巧,它可以避免在滚动时频繁地创建和查找视图对象。通过创建一个...

    ListView加载多item布局

    当我们需要在一个ListView中展示多种不同类型的item布局时,这就涉及到"ListView加载多item布局"的技术。本教程将深入探讨如何实现这一功能,并结合性能优化策略,使ListView在处理大量数据时仍能保持流畅的用户体验...

    listview加载网络图片

    "ListView加载网络图片"这个主题涉及到如何有效地在ListView的每个Item中加载和显示从互联网获取的图像,同时保持性能和用户体验。 在描述中提到,提供的代码资源可以解决大部分开发者遇到的头疼问题,即如何优化...

    ListView性能优化系列之一

    这篇博客“ListView性能优化系列之一”着重探讨了如何通过深入理解源码和利用特定工具来提升ListView的性能。 首先,了解ListView的工作原理是优化的基础。ListView采用的是滚动复用机制,即“视图回收”...

    listview加载网络数据

    总之,ListView加载网络数据涉及网络请求、数据解析、异步处理等多个环节,合理的架构设计和选择合适的工具能提高应用的性能和用户体验。在实际开发中,还需要考虑错误处理、数据缓存、下拉刷新和上拉加载更多等高级...

    Android应用开发中ListView组件性能优化的研究.pdf

    【Android应用开发中ListView组件性能优化的研究】 在Android应用开发中,ListView是常见的用于展示大量数据的组件,但在处理大量数据时,如果不进行性能优化,可能会导致应用出现卡顿、延迟甚至崩溃。本文主要探讨...

    android listview 加载网络图片(线程池+缓存管理) 高性能

    综上所述,构建一个高性能的Android ListView加载网络图片,需要结合`ViewHolder`模式、线程池(ExecutorService)、缓存管理(内存+磁盘)以及高效的网络库(如OkHttp)。这样的解决方案不仅能提升用户体验,还能...

    listview加载图片

    综上所述,“listview加载图片”涉及到Android的网络编程、JSON解析、ListView适配器设计、图片加载库的使用以及性能优化等多个方面,开发者需要综合运用这些技术,实现流畅、高效的图片显示。在实际项目中,还需要...

    listview优化和异步加载全攻略

    总结,优化ListView和实现异步加载是提升Android应用性能的关键。通过上述策略,我们可以显著改善ListView的滚动性能,减少内存消耗,同时提供更流畅的用户体验。正确理解和应用这些技术,将使你的Android应用更具...

    listview异步加载优化实例

    关于listview的异步加载,网上其实很多示例了,中心思想都差不多,不过很多版本或是有bug,或是有性能问题有待优化。有鉴于此,本人在网上找了个相对理想的版本并在此基础上进行改造,下面就让在下阐述其原理以探索...

    listview 分页加载,优化

    ListView是Android平台上常见的一种用于展示大量数据的视图组件,尤其在处理长列表时,它的分页加载和优化显得尤为重要。以下将详细讲解ListView的分页加载机制以及相关的优化策略。 1. **分页加载原理**: 分页...

    ListView加载不同布局.zip

    以上就是实现ListView加载不同布局的基本流程。在实际应用中,你可能还需要考虑更多细节,如数据与布局类型的映射策略、优化ListView的滚动性能等。通过这种方式,我们可以灵活地定制ListView的显示效果,为用户提供...

    listview实现动态加载

    在Android开发中,ListView是一...综上,"ListView实现动态加载"涵盖了Android开发中的数据适配、视图复用、异步加载、滚动监听、内存优化等多个重要知识点。熟练掌握这些技巧,对于构建流畅、高效的列表界面至关重要。

    ListView动态加载

    4. **使用其他组件**:在某些情况下,可以考虑使用`RecyclerView`替换ListView,RecyclerView提供了更强大的功能,如ItemDecoration和LayoutManager,且更容易实现动态加载和优化。 以上是关于“ListView动态加载”...

    ListView优化及加载图片时内存溢出

    然而,如果不进行适当的优化,ListView可能会导致性能问题,甚至触发内存溢出(OOM)异常,尤其是在加载图片时。本篇将深入探讨ListView的优化策略以及如何避免在加载图片时出现内存溢出。 1. **ListView优化策略**...

Global site tag (gtag.js) - Google Analytics