Android ListView 优化最佳实践

移动开发 Android
我有篇博客教 大家如何利用 convertView 以及 viewHolder(static) 改善 ListView 卡顿情况;但是在 ListView 加载大量复杂布局和图片的时候,即使使用了 convertView 和 viewHolder,ListView还是卡顿,本文主要讨论了如何在加载复杂 list_item 同时保证 ListView 流畅性。

这篇博客教大家如何利用 convertView 以及 viewHolder(static) 改善 ListView 卡顿情况;但是在 ListView 加载大量复杂布局和图片的时候,即使使用了 convertView 和 viewHolder,ListView还是卡顿,本文主要讨论了如何在加载复杂 list_item 同时保证 ListView 流畅性。

核心思想是

监听滑动据加载,异步加载数据。

getView 函数一定不能耗时,有耗时任务要异步加载。

主要的方法:

  1. 先判断当前 ListView 的状态,只有 ListView 停止滑动才开启新线程加载数据,其他状态均忽略。

  2. 使用 getFirstVisiblePosition 和 getLastVisiblePosition 方法来显示 item。

  3. 耗时任务一定不要在 getView 方法中进行,***异步进行。

具体代码如下:

  1. //判断listView状态 
  2.  AbsListView.OnScrollListener onScrollListener = new AbsListView.OnScrollListener() {// ListView 
  3.  // 触摸事件 
  4.   
  5.  public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
  6.  } 
  7.   
  8.  public void onScrollStateChanged(AbsListView view, int scrollState) { 
  9.  switch (scrollState) { 
  10.    case AbsListView.OnScrollListener.SCROLL_STATE_FLING:// 滑动状态 
  11.    threadFlag = false
  12.    break
  13.    case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:// 停止 
  14.    threadFlag = true
  15.    startThread();//开启新线程,加载数据 
  16.    break
  17.    case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:// 触摸listView 
  18.    threadFlag = false
  19.    break
  20.    default
  21.    // Toast.makeText(contextt, "default", 
  22.    // Toast.LENGTH_SHORT).show(); 
  23.    break
  24.    } 
  25.  } 
  26.  }; 

相信做到以上三点,就能运用自如的使用 ListView。

责任编辑:闫佳明 来源: stackvoid
相关推荐

2013-03-27 09:17:17

Android开发AndroidList

2010-07-06 09:07:09

2017-03-01 20:53:56

HBase实践

2014-02-26 11:01:28

日志优化系统日志

2014-03-19 14:34:06

JQuery高性能

2016-11-17 09:00:46

HBase优化策略

2011-08-11 09:45:25

2015-04-23 11:10:07

2017-05-19 10:03:31

AndroidBaseAdapter实践

2022-05-30 07:48:11

DevOps测试策略

2014-04-18 10:58:44

AndroidAPI实践

2017-05-18 12:36:16

android万能适配器列表视图

2013-09-17 14:00:19

AndroidListView原理

2011-08-18 11:05:21

jQuery

2023-07-21 01:12:30

Reactfalse​变量

2023-03-22 18:31:10

Android页面优化

2011-05-27 15:02:15

Android ListView

2022-03-29 13:27:22

Android优化APP

2010-04-20 09:14:33

Struts

2010-11-23 13:56:46

伊顿云计算
点赞
收藏

51CTO技术栈公众号