android中的ListView的优化

Android ListView高效实现与优化教程 本文还有配套的精品资源,点击获取 简介:ListView是Android中用于展示列表数据的关键组件, MyListView 项目提供了实际的代码示例,帮助开发者掌握如何高效使用ListView。课程内容涵盖了ListView的基础结构、Adapter模式、ViewHolder优化、监听器设置、性能优化、下拉刷新与上拉加载、自定义ListView、动画效果、数... 阅读详情
 

ListView优化

 

Adapter的作用就是ListView界面与数据之间的桥梁,当列表里的每一项显示到页面时,都会调用Adapter的getView方法返回一个View。想过没有? 在我们的列表有1000000项时会是什么样的?是不是会占用极大的系统资源?

 

List.xml:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout

  xmlns:android="http://schemas.android.com/apk/res/android"

  android:layout_width="fill_parent"

  android:layout_height="fill_parent"

android:orientation="vertical">

<LinearLayout android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal">

 <ImageView android:layout_height="wrap_content"

android:layout_width="wrap_content"

android:src="@drawable/icon"

android:id="@+id/imageView1"

android:layout_margin="5px">

</ImageView>

<TextView android:text="TextView"

android:id="@+id/textView1"

android:layout_width="wrap_content" android:layout_height="wrap_content"

android:layout_gravity="center"

android:textSize="20px">

</TextView>

</LinearLayout>

</LinearLayout>

1。最简单的方法,最慢且最不实用

    @Override

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

       // TODO Auto-generated method stub

       //找到R.layout.list布局文件

       layout_Adapter = (LinearLayout)this.layoutInflater.inflate(R.layout.list, null);

       imageView = (ImageView)layout_Adapter.findViewById(R.id.imageView1);

       textView = (TextView)layout_Adapter.findViewById(R.id.textView1);

       imageView.setImageResource(R.drawable.icon);

       textView.setText(title[position]);

       return layout_Adapter;

    }

2。利用convertview回收视图,效率提高200%。

@Override

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

       // TODO Auto-generated method stub

       if(convertView == null){

           convertView = (LinearLayout)this.layoutInflater.inflate(R.layout.list, null);

       }

       imageView = (ImageView)convertView.findViewById(R.id.imageView1);

       textView = (TextView)convertView.findViewById(R.id.textView1);

       imageView.setImageResource(R.drawable.icon);

       textView.setText(title[position]);

       return convertView;

    }

上面的代码是不是好了很多?系统将会减少创建很多View。性能得到了很大的提升。

3。利用viewholder模式,效率在提高50%

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

       // TODO Auto-generated method stub

       ViewHolder holder;

       if(convertView == null){

           convertView = (LinearLayout)this.layoutInflater.inflate(R.layout.list, null);

           holder = new ViewHolder();

           holder.tv = (TextView)convertView.findViewById(R.id.textView1);

           holder.im = (ImageView)convertView.findViewById(R.id.imageView1);

           convertView.setTag(holder);

       }else{

           holder = (ViewHolder)convertView.getTag();

           Log.d("list", "convertView....");

       }

       holder.im.setImageResource(R.drawable.icon);

       holder.tv.setText(title[position]);

       return convertView;

    }

 

    static class ViewHolder{

       TextView tv;

       ImageView im;

    }

这种方法为View设置了Tag属性,通过setTag()方法将View的ImageView、TextView组件的对象添加到Tag 中,当回收利用时直接用getTag()方法取出,不用重新获取组件。

三种方式加载效率对比如下图所示:

 

 

 

 

 

ListView优化三原则 :
1.复用convertView

在getItemView中,判断convertView是否为空,如果不为空,可复用。
2.异步加载图片

item中如果包含有webimage,那么最好异步加载

3.快速滑动时不显示图片

当快速滑动列表时(SCROLL_STATE_FLING),item中的图片或获取需要消耗资源的view,可以不显示出来;而处于其他两种状态(SCROLL_STATE_IDLE 和SCROLL_STATE_TOUCH_SCROLL),则将那些view显示出来

 

 

public voidsetVisibility (int visibility)

visibility

One of VISIBLE, INVISIBLE, or GONE

但是在调用此方法的时候

image.setVisibility(visibility)

其中visibility是int型的参数。对应上面:VISIBLE=0x00000000;INVISIBLE=0x00000004;GONE=0x00000008。

即:

image.setVisibility(0x00000000) / image.setVisibility(View.VISIBLE); 表示显示;

image.setVisibility(0x00000004) / image.setVisibility(View.INVISIBLE);表示隐藏;

image.setVisibility(0x00000008) / image.setVisibility(View.GONE);表示view不存在

 

Dynamics 365从入门到精通:一站式掌握微软智能商业应用平台 很多新手学Dynamics 365时,容易陷入“死记功能”的误区,其实这款平台的核心价值不是“功能多全”,而是“能适配企业业务流程,通过生态集成提升效率”。先从具体业务场景入手,理解每个功能的实际价值;再通过生态集成拓展系统能力;最后通过开发实现定制化,满足企业的特殊需求。按照这个思路,新手不用害怕复杂,一步步落地实战,3个月就能从“入门”到“能独立负责项目”。如果在学习过程中遇到具体问题(比如部署报错、数据迁移失败),欢迎在评论区留言,我会结合实战经验帮你解答! 阅读详情

相关推荐

当KCF遇见卡尔曼滤波:视觉跟随算法的动态优化实战

本文探讨了KCF算法与卡尔曼滤波在视觉跟随算法中的动态优化实践,通过深度融合策略提升目标跟踪的鲁棒性和实时性。特别针对机器人应用场景,详细解析了在Jetson等嵌入式平台上的优化技巧,包括计算图优化、内存访问优化和多线程流水线设计,实现了30FPS@1080p的稳定跟踪性能。

sugar的博客 956

android-----带你一步一步优化ListView(一)

ListView作为android中最常使用的控件,可以以条目的形式显示大量的数据,

扇扇来驰的博客 1万+

Widar3.0复现日志(DFSExtractionCode)

需要使用的matlab基本功能

XiaoQiXiaoWei_J的博客 2436

ListView优化(一) 总结

1. http://www.youkuaiyun.com/article/2014-09-03/2821533

sun20209527的专栏 976

从一根USB线缆说起:深入浅出聊聊那些影响信号完整性和EMC性能的‘小细节’(双绞、屏蔽、360度搭接全解析)

本文深入探讨了USB线缆中影响信号完整性和EMC性能的关键细节,包括双绞线绞距、屏蔽层设计和360度搭接工艺。通过实验数据和实用技巧,揭示了这些‘小细节’如何显著影响高频信号质量和电磁兼容性,为工程师提供了从选购到系统设计的全面指南。

weixin_30824479的博客 437

UDS服务应该支持哪些否定响应码

UDS服务应该支持哪些否定响应码所有服务都需支持的否定响应码具体的服务需要支持的否定响应码否定响应码定义及其取值 USD诊断服务的否定响应中包含有导致否定响应原因的编码,称为否定响应码(NRC, Negative Response Code)。否定响应码的取值范围为0x00 - 0xFF,被分为三组: 0x00:服务器内部实现否定响应码判断逻辑时使用,表示要给出肯定响应。 0x01 – 0x7F:诊断通信相关的否定响应码。 0x80 – 0xFF:服务器收到诊断服务请求时,由于某些条件不满足要求而给出的否定

闲聊汽车软件开发 4万+

listview、item中的view setVisibility(View.VISIBLE)无效

背景描述 如题,很奇怪的一个bug。 最近在写Launcher的负一屏 其中有一个新闻的相关需求 要求下拉刷新下拉加载 渣渣楼主用了xListview(听说大家现在都在用recyclerview)emmm不是很熟,还是看着listview有亲切感 中间发现,下拉刷新过程中,滑动新闻列表把listview的heard滑出屏幕。 等刷新出来之后再次下拉刷新,发现我的进度圈圈Pro......

纵容的博客 4726

烧录代码显示:no st-link 和Targrt DLL has been cancelled,如何解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1577

Android——ListView使用

本文用于对ListView简单使用的总结 首先建立item的界面 <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/shape" android:layout_margin="15dp" > <ImageView

weixin_44288786的博客 417

做了一个3DTiles编辑器,支持3DTiles的预览和裁剪导出

3DTiles编辑器的功能极其简洁,核心就是3DTiles格式模型的预览和裁剪。为了演示方便,本文所使用的源数据为mipmap3d[1]网站所提供的无人机拍摄影像,并进行3DTiles构建。打开软件,输入的绝对路径之后,点击添加模型,就可以将模型加载进预览区。之后,点击裁剪模式按钮,默认会出现立方体裁剪框,可通过拖动句柄的方式去调整裁剪框的范围。同时,除了默认的盒体裁切模式外,还支持多边形裁切,点击多边形裁切后,可切换到顶视图,选择重绘多边形,可进行打点绘制。

兴趣使然的创作者 600

YOLOv5_DeepSORT_Pytorch训练自己的多目标跟踪模型

1 准备 环境配置:https://blog.youkuaiyun.com/weixin_50008473/article/details/115250986?spm=1001.2014.3001.5501 YOLOv5_DeepSORT_Pytorch代码地址: https://github.com/mikel-brostrom/Yolov5_DeepSort_Pytorch DeepSORT论文:https://arxiv.org/pdf/1703.07402.pdf 2 训练目标检测模型 训练自己的目标检测模

weixin_50008473的博客 1万+

安卓之高级控件Listview的优化

效果图如下: XML代码(activity_main)如下: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:la

YDCookie的博客 494

61、增益调度控制器:原理、建模与调优

本文详细介绍了增益调度控制器的原理、建模方法和调优流程。增益调度是一种针对非线性系统的控制策略,通过在不同工作点使用不同的线性控制器实现全局控制。文章涵盖了在Simulink中使用Control System Toolbox模块建模的具体步骤,以及如何利用systune进行增益调度表的调优。同时,还讨论了实际应用中的注意事项、典型案例(如化学反应器和飞机控制),并与其它控制方法进行了对比。最后,文章展望了增益调度控制器的未来发展趋势,包括与人工智能的结合、多目标优化调优以及实时调优能力的提升。

rgv234567的博客 186

android的listview优化方案,Android ListView介绍及优化方案

xml设计-主javapackage com.itheima.listview;import java.util.HashMap;import java.util.Map;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.view.TextureVie...

weixin_36227730的博客 203

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Android之ListView原理学习与优化总结

2.3:在ListView中取图片时也不要直接拿个路径去取图片,而是以WeakReference(使用WeakReference代替强引用。比如可以使 用WeakReference mContextRef)、SoftReference、WeakHashMap等的来存储图片信息,是图片信息不是图片哦!2.4:在getView中做图片转换时,产生的中间变量一定及时释放,用以下形式:**bmp.recycle() //回收图片所占的内存。6.1:将线程的内部类,改为静态内部类。

2401_89690178的博客 1061

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Android ListView使用BaseAdapter与ListView的优化

BaseAdapter ListView

sbisyju的专栏 5205

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

安卓ListView性能优化(二)

         安卓ListView总结(一)      安卓ListView性能优化(二)     安卓ListView下拉刷新和加载(三)     ListView优化一直是一个老生常谈的问题,不管是面试还是平常的开发中,ListView永远不会被忽略掉,那么这篇文章我们来看看如何最大化的优化ListView的性能。 1.在adapter中的getView方法中尽量少使用逻辑 2...

不忘初心 915

【Android】ListView 优化

重用 ListView ItemListView创建时其会创建屏幕可容纳数量的 Item,ListView 滚动时,刚消失的 item 会被保存到回收池中,新出现的 item 从回收池中获取避免重复创建,这个回收池由 ListView 维护。从回收池取出 item 会传递给 Adapter 的 getView() 方法的第二个参数,如果回收池中没有内容就传递一个 null。所以在 getView()

业精于勤荒于嬉,行成于思毁于随 1274

【Android】ListView性能优化

使用convertView缓存布局 convertView 用于将之前的布局进行缓存,通过重用来提高性能 public class MyAdapter extends ArrayAdapter<Fruit> { …… @Override public View getView(int position, View convertView, View parent) { Fruit fruit = getItem(position); View view; if(convertV

qq_40313347的博客 335

Android ListView优化

Android ListView优化

Android开发-CXY的博客 693

安卓中listview中性能优化的处理

我们不要在ListView滑动的时候载入图片,那样会使ListView变得卡顿,所以我们须要再监听器里面监听ListView的状态。能够让一个View将他自己的drawing保存在cache中(保存为一个bitmap),这样下次再显示View的时候就不用重画了,ListView默认开启了animateCache,这会消耗大量的内存,因此会频繁调用GC,我们能够手动将它关闭掉。// 这是设置image的參数,每次getView方法运行时都会运行这段代码。//在这里进行逻辑推断。说白了就是减少更多的嵌套布局。

m0_62089210的博客 666

Android中ListView的优化

安卓中ListView使用的频率还是很高的,为了避免内存泄漏,优化就显得是必须的了 直接上代码(这里只写了一级、二级优化)public class MyAdapter extends BaseAdapter { private Context context;//上下文 private ArrayList<CaiBean> cbs;//数据源 public MyAdapter

Mr_GLY_di的博客 556

Android中Listview的优化

说起Listview的优化,老生常谈啊,面试必问的一个点。我在筛选面试简历的时候,发现一个童鞋简历上写着ListView优化使用三级缓存?什么鬼?我孤陋寡闻了,哈哈,之前还真不知道,网上看了下零零散散,这方面的讲解并不是很详细,搜罗了几篇文章,我在这里做一下整合,回头好好研究一下,大家共同学习。 首先Listview是需要和适配器配合使用的,常用的适配器有ArrayAdapter,SimplerAd

GeofferySun的专栏 861

【安卓】ListView的优化

①继上一次FruitAdapter的getView()方法每次的调用都要对布局进行一次重新加载 这次使用getView中的converView参数,用于将之前加载好的布局进行缓存,以便重复使用 先判断布局是否存在 若不存在,则加载布局,若存在,则用convertView进行重用 if(convertView == null){ view = LayoutInfl...

longlongfishday的博客 290

Android之——ListView优化

作为客户端,其最主要的任务就是最直观的和用户交互。从服务器拿数据,解析过后显示数据,根据用户操作按照一定的协议传回数据,达到用户想要的结果。这是我自己的理解,所以我们的程序,必须给用户一个良好的体验。 listView可以说是安卓开发中很重要的一个控件。我所做的项目中,几乎每个页面都会有listView。Adapter是listView和数据源间的中间人。当每条数据进入可见区域时,adapter

冰河的专栏 4148
上一篇: android中内存溢出自己的一些总结
下一篇: android ListView中一些源码测试程序
AndroidDevWjm
博客等级 码龄15年 6粉丝 17原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值