如何优化Android中的ListView
如何优化Android中的ListView?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
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进行绑定,从而减少系统查找这样的耗时操作.
两种优化方案实际代码如下:
@Overridepublic 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);}static class ViewHolder { TextView tv_phone; TextView tv_mode; ImageView iv_delete_blacknumber;}
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
如何优化Android中的ListView
下载Word文档到电脑,方便收藏和打印~
猜你喜欢
如何优化Android中的ListView
Android中ListView Item布局优化技巧
Android ListView列表怎么优化
Android ListView介绍及优化方案
Android ListView列表优化的方法详解
Android ListView常见的优化方式详解
Android中ListView的几种常见的优化方法总结
Android ListView优化之提高android应用效率
Android之ListView优化技巧有哪些
Android ListView列表优化的方法有哪些
Android编程使用缓存优化ListView的方法
android中的ListView
android listview优化几种写法详细介绍
Android ListView适配器(Adapter)优化方法详解
Android中listview如何刷新数据
实例讲解Android app开发中ListView的基本使用及优化
浅谈Android开发中ListView控件性能的一些优化方法
android的性能如何优化
Android项目中如何优化Bitmap的加载
编程热搜
Python 学习之路 - Python
一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-chatgpt的中文全称是什么
chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列C/C++可变参数的使用
可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃Python 3 教程
Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 PythonPython pip包管理
一、前言 在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install 和 pip , 目前官方推荐使用 pip。
编程资源站
- 资料下载
- 历年试题
目录
反馈
我要
反馈