博客
关于我
ListView优化
阅读量:58 次
发布时间:2019-02-25

本文共 1164 字,大约阅读时间需要 3 分钟。

第一:重用convertView

在Android开发中,ListView的效率优化是一个重要课题。一个常见的优化手段是重用convertView。通过判断convertView是否为null,我们可以决定是否需要创建新的视图。若convertView为null,则需要生成一个新的布局视图,填充数据后再返回给底层ListView进行展示。这种方式能够有效减少内存的占用,提升应用的运行效率。

第二、通常有一个内部类ViewHolder

为了提高ListView的效率,还可以使用ViewHolder模式。通过创建一个内部类ViewHolder,我们可以为ListView中的各个控件(如TextView、ImageView等)设定引用,避免每次都通过findViewById方法查找控件。这样可以减少findViewById的性能消耗,提升应用的运行速度。

第三、ListView布局文件写高度match_parent,写warp_content至少要测量4次,严重拖慢效率。

在布局文件中,若ListView的高度设置为match_parent,且内容包含warp_content控件时,系统可能需要多次测量才能确定控件的尺寸。频繁的测量会导致布局绘制过程变慢,进而影响ListView的刷新效率。因此,应当尽量避免这种情况,或者通过优化布局设计来减少测量次数。

特别注意:

在使用ViewHolder时,将ViewHolder设为static类型。在第一次创建ViewHolder时,系统会花费一定的时间完成初始化,但之后的创建则会直接使用内存中的ViewHolder实例。这种方式可以确保内存中只存在一个ViewHolder实例,减少内存分配和释放的开销,从而提升应用的性能表现。

可以从三个方面来优化:
  • 异步加载item ListView的每个item都是通过getView方法初始化的。为了提升效率,所有耗时操作(如网络图片加载)应当在非UI线程中执行。无论是从本地还是网络加载图片,都可以通过AsyncTask、Glide等框架进行异步处理,避免阻塞UI线程。
  • 控制异步任务的执行频率 在ListView滑动时,可能会频繁触发异步任务(如图片加载)。为了防止过多的异步任务堆积,造成线程池拥堵,可以在ListView滑动时暂停异步任务的执行。通过设置ListView的OnScrollListener,可以检测滑动状态,进而控制异步任务的启动频率。
  • 开启硬件加速 在Android应用中,开启硬件加速可以显著提升UI层的渲染效率。通过在AndroidManifest.xml中设置hardwareAccelerated="true",可以为应用的Activity开启硬件加速,进一步优化ListView的刷新性能。
  • 转载地址:http://wjh.baihongyu.com/

    你可能感兴趣的文章
    mysql中的 +号 和 CONCAT(str1,str2,...)
    查看>>
    Mysql中的 IFNULL 函数的详解
    查看>>
    mysql中的collate关键字是什么意思?
    查看>>
    MySql中的concat()相关函数
    查看>>
    mysql中的concat函数,concat_ws函数,concat_group函数之间的区别
    查看>>
    MySQL中的count函数
    查看>>
    MySQL中的DB、DBMS、SQL
    查看>>
    MySQL中的DECIMAL类型:MYSQL_TYPE_DECIMAL与MYSQL_TYPE_NEWDECIMAL详解
    查看>>
    MySQL中的GROUP_CONCAT()函数详解与实战应用
    查看>>
    MySQL中的IO问题分析与优化
    查看>>
    MySQL中的ON DUPLICATE KEY UPDATE详解与应用
    查看>>
    mysql中的rbs,SharePoint RBS:即使启用了RBS,内容数据库也在不断增长
    查看>>
    mysql中的undo log、redo log 、binlog大致概要
    查看>>
    Mysql中的using
    查看>>
    MySQL中的关键字深入比较:UNION vs UNION ALL
    查看>>
    mysql中的四大运算符种类汇总20多项,用了三天三夜来整理的,还不赶快收藏
    查看>>
    mysql中的字段如何选择合适的数据类型呢?
    查看>>
    MySQL中的字符集陷阱:为何避免使用UTF-8
    查看>>
    mysql中的数据导入与导出
    查看>>
    MySQL中的时间函数
    查看>>