-
在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;
}
三种方式加载效率对比如下图所示:
说明:上述三个例子代码摘自google 2010 I/O大会
当处理一些耗时的资源加载的时候需要做到以下几点,以使你的加载更快更平滑:
1. 适配器在界面主线程中进行修改
2. 可以在任何地方获取数据但应该在另外一个地方请求数据
3. 在主界面的线程中提交适配器的变化并调用notifyDataSetChanged()方法
相关推荐
完美解决ListView和CheckBox的焦点冲突及CheckBox的复用问题
完美解决了ListView和CheckBox的焦点冲突及CheckBox的复用问题,讲解了CheckBox的全选、反选、删除功能及在下拉刷新和下拉加载中如何保存CheckBox的先前的选中状态
listview加载性能优化ViewHolder
在android开发中Listview是一个很重要的组件,它以列表的形式根据数据的长自适应展示具体内容,用户可以自由的定义listview每一列的布局,但当listview有大量的数据需要加载的时候,会占据大量内存,影响性能,这时候就需要按需填充并重新使用view来减少对象的创建。 ListView加载数据都是在public View getView(int position, View c
二进制部署的K8s集群,如何对到期证书更新
一年前搭建的k8s集群,突然不能够正常访问,出现502错误,首先怀疑容器没起来,先对问题进行排查,排查响应的容器有没有正常启动,状态一切正常,访问容器地址也可以正常访问,于是访问node port地址,发现无法正常访问,确定问题出现在svc中。 由于其他的应用、系统也无法提供正常的服务,应该是k8s的问题,非单个应用的原因。查看服务状态,kubectl describe svc xxx,endp...
list view优化重用 简单实现列表
先上一下效果图首先是布局模板<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_heigh...
[Linux]双网卡 CentOS 系统中指定网络请求走特定网卡的配置方法
本文详细介绍了在双网卡CentOS系统中指定特定域名/IP通过指定网卡传输流量的方法。核心步骤包括:1)确认网卡信息(ip addr)和域名IP解析(nslookup);2)添加临时路由(ip route add);3)持久化配置(创建route-eth1文件);4)验证配置(ip route show和curl测试)。文章还提供了网关查询、路由删除等常见问题的解决方法,并区分了不同CentOS版本重启网络服务的命令差异。通过合理配置路由规则,可实现流量的定向传输需求。
全志DRM框架下LVDS双屏异显配置实战
本文详细介绍了在全志DRM框架下配置LVDS双屏异显的实战经验。涵盖硬件连接、内核配置、设备树修改、背光控制及U-Boot适配等关键步骤,重点解析屏参转换技巧与双屏route配置,帮助开发者解决工业控制台等多屏应用中的显示适配问题,提升开发效率。
ListView的优化问题以及策略
ListView这个布局经常用到,这个布局中有一个方法getView需要我们来实现,如果使用没有优化的ListView,还是比较消耗内存。下面说一下优化ListView的方法: 主要从两个方面: 首先没有之前的getView方法: @Overridepublic View getView(int position, View convertView, ViewGroup parent) {
避坑指南:Winbond W25Q256JV QSPI Flash状态寄存器那些坑(含QE位不可改的解决方案)
本文深度解析Winbond W25Q256JV QSPI Flash状态寄存器的常见问题与解决方案,重点解决QE位不可修改、写保护区域异常等典型问题。通过实战代码示例和寄存器配置技巧,帮助开发者高效完成Flash读写测试与性能优化,避免常见设计陷阱。
ListView优化方案和原理,你都知道了嘛?
1.重用ConvertView ListView的View回收机制:在可视范围上面或者下面的View加入到回收池中。当在可视范围内的View被移出可视范围内时,其也会被添加到回收池中。以这种方式ListView只需占用非常少的内存几可以存储可视范围内的View和回收池中的View。 参数convertView实际上就是一个可回收的View。当ListView要回收这个View的时候,它的数据就会被...
SimpleITK图像基础(一)——3D Resampling
文章目录前言基于SimpleITK进行实现 前言 进入深度学习网络之前需要进行统一数据集,这个时候需要对这些数据集进行重新采样,即假设各向同性体素并重新定向它们,以便可以读取所有图像的像素矩阵。 在将方位变换成一致时,可以用DICOMOrientImageFilter过滤器,可以将 DesiredCoordinateOrientation设置为你想要变换的方位,它将计算出所需的置换顺序并根据需要执行翻转以接近所需方向。 基于SimpleITK进行实现 workflow如下: step 1:首先运行DICOM
梯度提升决策树GBDT原理与代码实例讲解
梯度提升决策树GBDT原理与代码实例讲解 1.背景介绍 1.1 机器学习发展历程 机器学习是人工智能领域的一个重要分支,旨在使计算机具备学习和改进自身性能的能力。随着大数据时代的到来,海量的数据为机器学习算法提供了广阔的应用空间。在
listview优化方案
优化方向: 1、 利用convertView缓存的布局减少创建listview item的数量,尽可能复用以前创建的 2、利用viewholder机制,尽可能的减少 findviewbyid这一类的查找控件的操作。如果要复用布局,则同时将查找到的控件存储起来(setFlag),下次使用的时候可以直接用(getFlag)。 示例代码 示例代码解析: 见一个viewholder的类,把所有用到的控...
R语言caret拟合模型:train函数构建xgBoost Dart模型、模型调优、自定义设置trainControl函数和tuneLength参数
R语言caret拟合模型:train函数构建xgBoost Dart模型、模型调优、自定义设置trainControl函数和tuneLength参数
ListView的简单优化
原理:创建一个容器装要复用的View,设置判断,达到减少findViewById的次数的效果 MainActivity如下,这个比较简单就不解释了 主要讲下适配器: 继承BaseAdapter后实现四个方法 具体解释如下图(两图是一起的,最后会放源码) 上图所示:在getview方法中有三个参数,起到优化的部分为ViewHolder的使用,主要方法setTag(),getTag()。 适配器代...
RTOS与Linux功能差异与应用场景全面对比
在嵌入式系统的开发中,操作系统的选择至关重要。和是两种广泛应用的操作系统,它们在功能、设计目标以及应用领域中各具优势。随着嵌入式系统的不断发展,已成为嵌入式行业的大趋势。那么,这两者到底有什么不同呢?
最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版
Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。
ListView优化
Android性能优化-ListView ListView的优化主要分为以下几点 1 convertView的复用 ListView每次滚动都会调用getView方法,所以优化getVieiw是重中之重 convertView介绍 convertView是刚刚滚动出可见区域的View的引用,此时它已经不可见,所以应该被复用以减少View的创建 优化代码 View view = null;//getView方法要返回的View if(convertView == null){//如果当前没有可以复用的View
Camera2Demo
在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作
Listview优化总结
Listview是andorid中最常用的控件之一,但要用好这个控件并不是那么容易。不注意优化的使用经常出现页面卡顿,OOM等问题的出现。在此本人将自己的拙见整理汇总,归纳listview的优化措施。 1.复用convertView 2.viewHolder保存控件 3.分页加载 4.UI卡顿优化 5.OOM
精雕软件(JDpaint) 5.5 绿色版
精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版
文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况
主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。
android ListView优化
作为一个android开发不知道多少年的开发者来说,除了四大组件之外,我觉得开发过程中最需要注意的就是在使用listview的优化。关于listview的优化我有几个心得:未优化的代码:public View getView(int position, View convertView, ViewGroup parent) { final yuangongBean.DataBean pro...
listview 优化
XML: <ListView android:id="@+id/list_view" android:layout_width="match_parent" android:layout_height="match_parent" /> 主页: public class MainActivity extends...
Android之ListView原理学习与优化总结
2.3:在ListView中取图片时也不要直接拿个路径去取图片,而是以WeakReference(使用WeakReference代替强引用。比如可以使 用WeakReference mContextRef)、SoftReference、WeakHashMap等的来存储图片信息,是图片信息不是图片哦!2.4:在getView中做图片转换时,产生的中间变量一定及时释放,用以下形式:**bmp.recycle() //回收图片所占的内存。6.1:将线程的内部类,改为静态内部类。
ListView优化功能
//初始化组件 listView = (ListView) findViewById(R.id.ListView); text_title = (TextView) findViewById(R.id.text_title); //设置标题 text_title.setText("数据展示"); list = new ArrayList<Bea...
性能优化之ListView优化
等等呢个 转载于:https://my.oschina.net/u/3491256/blog/906357

5万+



被折叠的 条评论
为什么被折叠?



