Google在Google I/O大会上,提到Android在UI优化方面可以从以下五个方面入手:

  •   Adapter优化 
  • 背景和图片优化
  • 绘图优化
  • 视图和布局优化
  • 内存分配优化

1.Adapter优化

在ListView中,我们可以自定义Adapter,继承BaseAdapter,再重写相应的方法,
但需要特别注意,ListView的每一项视图加载都要经过getView这个方法,所以优化adapter
也就在此方法。

方案一:

 1       @Override
 2     public View getView(int position, View convertView, ViewGroup parent) {
 3         // TODO Auto-generated method stub
 4
 5         convertView = mInflater.inflate(R.layout.img_listview_item, null);
 6         holder.imgIv = (ImageView)convertView.findViewById(R.id.imageView1);
 7         holder.itemTv = (TextView)convertView.findViewById(R.id.textView1);
 8         holder.imgIv.setImageResource(R.drawable.icon);
 9         holder.itemTv.setText(mDataItem[position]);
10
11         return convertView;
12     }

  大家可以从方案一中看到,listview每显示一项,都要调用getView方法,对于每次重复创建convertView对象以及findViewById
 方法,都会影响性能,如果ListView有显示N多项,可想而知,资源的消耗有多大!

方案二:

 1       @Override
 2     public View getView(int position, View convertView, ViewGroup parent) {
 3         // TODO Auto-generated method stub
 4
 5         ViewHolder holder;
 6         if(convertView == null){
 7             holder = new ViewHolder();
 8             convertView = mInflater.inflate(R.layout.img_listview_item, null);
 9             holder.imgIv = (ImageView)convertView.findViewById(R.id.imageView1);
10             holder.itemTv = (TextView)convertView.findViewById(R.id.textView1);
11             convertView.setTag(holder);
12
13         }else{
14
15             holder = (ViewHolder)convertView.getTag();
16
17         }
18
19         holder.imgIv.setImageResource(R.drawable.icon);
20         holder.itemTv.setText(mDataItem[position]);
21
22         return convertView;
23     }
24
25
26     class ViewHolder{
27         public ImageView imgIv;
28         public TextView itemTv;
29     }

   从方案二中,我们看到,当convertView为null的时候才去创建convertView以及获取相应的控件对象,在最下面,还创建一个ViewHolder类,这个类是干嘛用的呢?
 它是保存每项ListView视图里的控件对象,达到缓存控件对象,而不用每次都用findViewById()去获取,节省资源,这是一个优化细节。

注意:

在界面初始后,第一次可见的视图项,这个要具体ListView可最多显示几项,在这几项初始时,都会调用
    if(convertView == null){
        最初几项调用...
    }

但拉动ListView显示下面的数据时,那接下来就调用

}else{

holder = (ViewHolder)convertView.getTag();
   
    }

这部分啦!

转载于:https://www.cnblogs.com/hpboy/archive/2012/07/10/2584532.html

[Android]ListView控件之Adapter性能优化相关推荐

  1. ListView控件和Adapter

    文章目录 1.ListView组件的作用 2.Adapter的作用 2.1 android adapter的类图 3.adapter的使用 3.1 ArrayAdapter(数组适配器) 案例 3.2 ...

  2. Android自绘控件开发与性能优化实践——以录音波浪动画为例

    前言 本文实战性较强,主要目的是通过一个自定义控件的开发,引出我对自定义控件性能优化的一些思考和实践,欢迎各位喜欢移动开发的小伙伴来拍砖~ 本文由于篇幅有限,只讲解思路,并没有放出大量源代码,如果对本 ...

  3. android ListView控件滑动时出现黑色背景问题解法方案

    设置ListView属性android:cacheColorHint="#00000000" <ListViewandroid:id="@+id/orderDeta ...

  4. 如何清空android ListView控件的内容

    第一种方法: listView.setAdapter(null); 第二种方法: listAdapter.clear(); listAdapter.notifyDataSetChanged() ; 满 ...

  5. android 清空所有控件,如何清空android ListView控件的内容

    匿名用户 1级 2014-12-30 回答 代码如下: BaseAdapter ba=new BaseAdapter() { public int getCount() { // TODO Auto- ...

  6. android中的 listview控件,聊聊Android中的ListView控件

    软硬件环境 Macbook Pro MGX 72 Android Studio 1.3.2 坚果手机 前言 ListView是Android系统中使用非常广泛的一种控件,几乎所有的App都会用到它.它 ...

  7. listview控件Android,Android中ListView控件的简单使用

    文章引自郭霖<第一行代码> ListView允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内,同时屏幕上原有的数据则会滚动出屏幕 使用LIstView控件 1 在布局文件中引入Li ...

  8. Android 数据显示控件(ListView实战演练)

    源码 [工程文件]:https://gitee.com/lwx001/ListView 推荐博客:(这个更详细.) https://blog.csdn.net/weixin_44949135/arti ...

  9. android中ListView控件onItemClick事件中获取listView传递的数据

    http://blog.csdn.net/aben_2005/article/details/6592205 本文转载自:android中ListView控件&&onItemClick ...

最新文章

  1. 【玩转 Angular】1. Angular-CLI 安装与使用
  2. 《The C++ Standard Library》第50页 关于传递auto_ptr的问题
  3. mysql三高讲解(一):1.1 客户端怎样连接mysql数据库
  4. 短信API接口demo示例-C#/Message/XSend
  5. 关闭445端口操作手册
  6. 圆圆曲(清.吴伟业)
  7. 带键盘的java模拟器_虚拟键盘实现!JAVA模拟器PSPKVM v0.3.2推出
  8. 抽空写了个小游戏(未完待续)
  9. 六度分离(hdu1869,floyd最短路)
  10. BGP高防服务器与普通高防服务器有什么区别?
  11. 榆熙:拼多多商家提升销量的技巧
  12. 四级口语计算机对话,2017大学英语四级口语场景对话练习(5)
  13. ios13如何隐藏第三方应用(苹果ios13怎么隐藏个别软件)
  14. 香侬科技提出中文字型的深度学习模型Glyce,横扫13项中文NLP记录
  15. rk1808交叉编译opencv_ubuntu16.04交叉编译opencv 移植到rk1808上
  16. DDR SDRAM原理介绍
  17. Selenium 设置带账号密码的socks5代理
  18. STM32 keil5 报错:flash download failed-cortex M3解决方法
  19. Camera2架构学习(二)——CameraServer和CameraProvider的启动初始化
  20. 【YOLO系列】YOLO V1 论文精读与学习总结

热门文章

  1. js控制input框输入数字时,累计求和
  2. 设计模式--6大原则--开闭原则
  3. ubuntu dotnet core run 十月第一弹
  4. [转] 数学符号英文拼写及发音
  5. Java学习日记----反射
  6. QQ截屏 抓级联菜单、下拉菜单及右键弹出菜单图
  7. TiDB 架构及设计实现
  8. Oracle数据库执行exp命令--报参数'log' 不允许有多个值
  9. 常州大学阿里云大数据学院举行“创新思维”课程答辩
  10. 极客邦科技旗下TGO鲲鹏会成立美国硅谷分会