Android ListView常见的优化方式详解
发布时间 - 2026-01-10 23:16:56 点击率:次ListView的优化

对于ListView来说,应该算是布局中几种最常用的组件之一了,使用也十分方便,下面个大家介绍一下两种常见的优化方式.
1.条目复用优化
- 其实listview的工作原理就是,listview在请求屏幕可见的item数时,convertView在getVIew中是null 的.
- 但是当屏幕向下滑动的时候(比如该屏幕尺寸可显示7条teim),在item1被隐藏,此时出现item8时,covertView的值就不为null 了,因为item1去填充它.
- 而如果不做复用处理的话,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浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤
如何在腾讯云服务器快速搭建个人网站?
如何获取上海专业网站定制建站电话?
如何做网站制作流程,*游戏网站怎么搭建?
上一篇:详解关于laravel自动路由
上一篇:详解关于laravel自动路由

