进一步优化ListView

之前我已经分享过一篇:viewHodler的通用写法,就是专门用来优化listview的加载的,但是对于复杂的布局,我们还需要在listview滑动和不滑动时进行自己的处理,今天我看到一篇文章就是讲这方面的,虽然不是很完善,但思想已经对了。

主要思想:

  • 监听滑动据加载,异步加载数据
  • 避免同一个视图重复加载
  • getView 函数一定不能耗时,有耗时任务要异步加载

实现方法:

  • 先判断当前 ListView 的状态,只有 ListView 停止滑动或缓慢滑动的时候才开启新线程加载数据,其他状态(快速滑动listview)均忽略加载。
  • 使用 getFirstVisiblePosition 和 getLastVisiblePosition 方法来显示 item。
  • 耗时任务一定不要在 getView 方法中进行,最好异步进行。

下面的方法仅仅是起一个说明的作用,实际中还需要判断list的滑动速度什么的

import android.widget.AbsListView;

public class d {

    // 1. 判断listView状态
    AbsListView.OnScrollListener onScrollListener = new AbsListView.OnScrollListener() {
        // 触摸事件
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
            // TODO:init
        }

        public void onScrollStateChanged(AbsListView view, int scrollState) {
            switch (scrollState) {
            case AbsListView.OnScrollListener.SCROLL_STATE_FLING:// 滑动状态
                threadFlag = false;
                break;
            case AbsListView.OnScrollListener.SCROLL_STATE_IDLE:// 停止
                threadFlag = true;
                startThread();// 开启新线程,加载数据
                break;
            case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL:// 触摸listView
                threadFlag = false;
                break;
            default:
                // Toast.makeText(contextt, "default",
                // Toast.LENGTH_SHORT).show();
                break;
            }
        }
    };
}
时间: 2024-08-12 10:35:43

进一步优化ListView的相关文章

android-----带你一步一步优化ListView(二)

上一篇介绍了通常我们优化ListView的方式,但是这点对于要加载大量图片的ListView来说显然是不够的,因为我们知道要想获取一张图片不管是本地的还是网络的,其性能上均没有从内存中获取快,所以为了提升用户的体验度,对于加载图片的ListView,通常我们会通过缓存做以下优化: 基本思想: (1)如果想要加载图片,首先先去内存缓存中查看是否有图片(内存缓存) (2)如果内存缓存中没有,就会去本地SD卡上查找是否存在(SD卡缓存) (3)如果本地SD卡上也没有的话,则会去网络下载了,下载完成之后

android问题及其解决-优化listView卡顿和怎样禁用ListView的fling

问题解决-优化listView卡顿和怎样禁用ListView的fling 前戏非常长,转载请保留出处:http://blog.csdn.net/u012123160/article/details/47720257 问题产生 这算是刚到实习公司接触到的第一个任务.公司某一产品中某个界面的listView高速滑动会有卡顿的现象发生,我的任务就是解决它. 产生原因分析 我一開始的想法比較简单.可能是listview的优化没有做到位,比如convertView的复用.viewHolder的使用等等基础

常用的优化ListView效率的方法及其原理

在Android开发中,ListView的使用频率及其高,可以说99%的应用中你都可以看到他的身影. 在日常的开发工作中,我们一般会通过以下方法来优化ListView的效率: 1.复用getView方法中的convertView 一个ListView可能有很多Item,但是限于手机屏幕非常有限,所以只能显示很少的一部分Item,比如能显示10个,那么Android会在ListView中保存多余10个的Item, 溢出屏幕的Item会被回收到一个池子中,以备后用,那么就不用从新new出View对象

利用Trie树求多个字符串编辑距离的进一步优化

1.引言 题目的意思应该是:在一个给定的字典中,求与给定的字符串的编辑距离不大于2的所有的单词.原先写过两片关于此问题的文章,那两片篇章文章给出两种解决思路:其一是暴力求解法,这种方法最容易想到.就是将词典中的词一一与给定的字符串计算编辑距离,不大于2的输出,大于2的舍弃,这种方法思路简单但是很费时间.其二根据词典中这些词之间的编辑距离建立一个以单词为节点的Trie树,遍历的时候,通过计算根节点与给定字符串的编辑距离就可以排除掉一部分分支了,然后继续计算该字符串与剩余的分支的根的编辑距离,继续排

理解用setTag 和 Viewholder 来优化listView

在说 setTag和getTag之前,我们先说下 Viewholder,它不是Android开发固定的API,而是谷歌Demo中推荐的设计方法.Viewholder对象它一般包括listview子项里所有的组件,convertView是空的,在Viewholder里存储对列表子项每个组件的id应用,通过setTag方法,把这个带有view引用的对象附加在View上,如此,当listView更新的时候,就不用再次去重复寻找引用,并且强制转换等工作,findViewById(R.id.img):通过

进一步优化SPA的首屏打开速度(模块化与懒载入) by 嗡

前言 单页应用的优点在于一次载入全部页面资源,利用本地计算能力渲染页面.提高页面切换速度与用户体验.但缺点在于全部页面资源将被一次性下载完,此时封装出来的静态资源包体积较大,使得第一次打开SPA页面时候须要的载入时间较长. 在上一篇文章Angular2 单页应用一些优化总结 中提到的利用压缩.混淆.开启gzip传输后,我们成功将3.5兆的资源包压缩到350k.可是假设SPA应用的页面数进一步添加,100个甚至1000个页面的时候,还是无法避免巨大的首页资源包载入的问题. 所以350k的资源包是否

Ace教你一步一步做Android新闻客户端(五) 优化Listview

今天写存货了 调试一些动画参数花了些时间 ,嘿嘿存货不多了就没法做教程了,今天来教大家优化listview,等下我把代码编辑下 这次代码有些多 所以我把条理给大家理清楚.思路就是把加载图片的权利交给OnScrollListener . 1 首先来到 NewsAdapter这个类 ,我们给他实现了一个 AbsListView.OnScrollListener 这个接口,这个接口有两个方法: @Override public void onScrollStateChanged(AbsListView

进一步优化SPA的首屏打开速度(模块化与懒加载) by 嗡

前言 单页应用的好处在于一次载入所有页面资源,利用本地计算能力渲染页面,提高页面切换速度与用户体验.但缺点在于所有页面资源将被一次性下载完,此时封装出来的静态资源包体积较大,使得第一次打开SPA页面时候需要的载入时间较长. 在上一篇文章Angular2 单页应用一些优化总结 中提到的利用压缩.混淆.开启gzip传输后,我们成功将3.5兆的资源包压缩到350k.但是如果SPA应用的页面数进一步增加,100个甚至1000个页面的时候,还是无法避免巨大的首页资源包加载的问题.所以350k的资源包是否还

android问题及其解决-优化listView卡顿和如何禁用ListView的fling

问题解决-优化listView卡顿和如何禁用ListView的fling 前戏很长 问题产生 这算是刚到实习公司接触到的第一个任务.公司某一产品中某个界面的listView快速滑动会有卡顿的现象发生,我的任务就是解决它. 产生原因分析 我一开始的想法比较简单,可能是listview的优化没有做到位,例如convertView的复用.viewHolder的使用等等基础的优化措施,然并卵.好长时间后终于找到了问题发生的相关代码...经过在可疑语句上(onTouchEvent方法中的几个case.on