zoukankan      html  css  js  c++  java
  • OnScrollListener拖住主线程

    @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                    int visibleItemCount, int totalItemCount) {
    
                int visiblePosition = lv_res.getLastVisiblePosition();
    
                if ((visiblePosition + 1) == totalItemCount ) {
    
                    if (totalItemCount > 0) {
    
                        lv_res.addFooterView(footerView);
    
                        Logger.i(TAG, "加载数据了哦");
                        
                        callServer();
    
                    }
                }
            }

    这是重写的方法,callServer()方法是用来访问服务器获取数据,在主线程中执行,setOnScrollListener监听也是在主线程中执行的。看起来似乎没有错,其实错就错在这个监听重写的方法中,if ((visiblePosition + 1) == totalItemCount )这行代码意思是如果当前所显示的数据的position等于总的数据量,就是执行callServer()方法,所以如果从服务器拿到的数据总数还不够把整个界面填满的话,callServer()方法就会在主线程开启时执行一遍,onScroll()方法里又执行一遍,比较耗时,所以会拖住主线程。解决方法也很简单,把if()语句中加个判断即可:

    if ((visiblePosition + 1) == totalItemCount && totalItemCount > visibleItemCount)
    这个totalItemCount > visibleItemCount的意思就是说必须获得的数据的总数大于整个界面显示的总数才调用用callServer()方法,再从服务器加载一批数据。
  • 相关阅读:
    docker学习-docker核心技术
    Ecmall 中国地区设置
    lazyload.js实现图片异步载入
    inpyt 按钮变透明 边框
    vertical-align0 垂直对齐- 图片 兼容个浏览器
    div文字超出
    jquery满屏滚动代码
    $().index() 两种用法
    setTimeout不断重复执行
    background属性
  • 原文地址:https://www.cnblogs.com/wangyuehome/p/3039902.html
Copyright © 2011-2022 走看看