Android ListView常见的优化方式详解

发布时间 - 2026-01-10 23:16:56    点击率:

ListView的优化

对于ListView来说,应该算是布局中几种最常用的组件之一了,使用也十分方便,下面个大家介绍一下两种常见的优化方式.

1.条目复用优化

  1. 其实listview的工作原理就是,listview在请求屏幕可见的item数时,convertView在getVIew中是null 的.
  2. 但是当屏幕向下滑动的时候(比如该屏幕尺寸可显示7条teim),在item1被隐藏,此时出现item8时,covertView的值就不为null 了,因为item1去填充它.
  3. 而如果不做复用处理的话,item8 则会继续去findviewById, 因此其实每个item里的View控件,竟然ID都是一样的,那我们其实可以利用covertView的复用原理,来优化listview,从而避免OOM异常.

详情见下图:

总结: 通过对上图的理解,那么我们得知listview的item是可以进行复用的,通过什么来复用?Android已经帮我们定义了一个方法getView(final int position, View convertView,ViewGroup parent) 里面的convertView 就是专门来处理复用的item的,因此我们只要对他处理就可以了.

2.优化findviewbyid

系统寻找子孩子id的方式: 从左向右,跟树状模式一样.

每次寻找子孩子都消耗很多的资源,但是子孩子的id都是被创建出来的,

也就是是说他们是固定的,竟然如此那么我们就可以对他进行优化;

系统找R.id的模式见下图:

总结: 通过对上图的理解,那么我们得知findviewbyid(id) 的底层操作太耗时了,如果一个布局里面有一百多层,那么我就单单是找一个小小的'ImageView' 都会找半天.幸好在2009年的google IO大会上,google的工程师推出了一个优化的方式 通过自定义一个viewholder类,来对view的id进行绑定,从而减少系统查找这样的耗时操作.

两种优化方案实际代码如下:

/**
 * @param position 位置   
 * @param convertview 复用view

 * 历史回收的view对象. 当某个view对象被完全移除屏幕的时候 

 * 1. 尽量的复用converview(历史缓存的view),减少view对象创建的个数 
 * 2. 尽量的减少子孩子id的查询次数 . 定义一个viewholder
 */

@Override
public View getView(final int position, View convertView,
    ViewGroup parent) {
  View view;
  ViewHolder holder;
  if (convertView != null) {
    // 复用历史view对象
    view = convertView;
    holder = (ViewHolder) view.getTag();
  } else {
    // 创建新的view对象
    view = View.inflate(getApplicationContext(),
        R.layout.item_callsmssafe, null);
    // 每次寻找子孩子消耗很多的资源cpu 内存.
    // 只有当子view对象第一次被创建的时候 查询id
    holder = new ViewHolder();
    holder.tv_mode = (TextView) view
        .findViewById(R.id.tv_black_mode);
    holder.tv_phone = (TextView) view
        .findViewById(R.id.tv_black_phone);
    holder.iv_delete_blacknumber = (ImageView) view
        .findViewById(R.id.iv_delete_blacknumber);
    view.setTag(holder);
}


/**
 * 子孩子id的容器
*/
static class ViewHolder {
  TextView tv_phone;
  TextView tv_mode;
  ImageView iv_delete_blacknumber;
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# Android  # ListView常见的优化  # listview  # 优化的方法  # listview优化方法  # Android中ListView的几种常见的优化方法总结  # Android ListView适配器(Adapter)优化方法详解  # Android ListView介绍及优化方案  # 实例讲解Android app开发中ListView的基本使用及优化  # 浅谈Android开发中ListView控件性能的一些优化方法  # Android编程使用缓存优化ListView的方法  # Android ListView优化之提高android应用效率  # Android中ListView Item布局优化技巧  # android listview优化几种写法详细介绍  # 复用  # 对他  # 两种  # 就可以  # 上图  # 都是  # 我就  # 半天  # 树状  # 希望能  # 几种  # 自定义  # 是说  # 不做  # 不为  # 找一个  # 谢谢大家  # 介绍一下  # 大会上  # 可以利用 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  零服务器AI建站解决方案:快速部署与云端平台低成本实践  Laravel如何构建RESTful API_Laravel标准化API接口开发指南  Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门  如何用虚拟主机快速搭建网站?详细步骤解析  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  网站图片在线制作软件,怎么在图片上做链接?  Laravel如何与Docker(Sail)协同开发?(环境搭建教程)  iOS中将个别页面强制横屏其他页面竖屏  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  简历没回改:利用AI润色让你的文字更专业  公司网站制作价格怎么算,公司办个官网需要多少钱?  如何在建站之星绑定自定义域名?  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  如何在橙子建站上传落地页?操作指南详解  Python企业级消息系统教程_KafkaRabbitMQ高并发应用  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  如何在IIS中新建站点并解决端口绑定冲突?  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)  laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析  如何快速上传建站程序避免常见错误?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  高端建站如何打造兼具美学与转化的品牌官网?  Python高阶函数应用_函数作为参数说明【指导】  使用Dockerfile构建java web环境  绝密ChatGPT指令:手把手教你生成HR无法拒绝的求职信  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  音响网站制作视频教程,隆霸音响官方网站?  PythonWeb开发入门教程_Flask快速构建Web应用  百度浏览器网页无法复制文字怎么办 百度浏览器复制修复  使用spring连接及操作mongodb3.0实例  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  Claude怎样写约束型提示词_Claude约束提示词写法【教程】  iOS发送验证码倒计时应用  Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】  Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置  个人网站制作流程图片大全,个人网站如何注销?  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  如何在腾讯云服务器快速搭建个人网站?  如何获取上海专业网站定制建站电话?  如何做网站制作流程,*游戏网站怎么搭建?