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()方法,再从服务器加载一批数据。
  • 相关阅读:
    Loadrunner日志设置与查看
    Mysqlfunc.c
    loadrunner生成随机uuid的方法
    数据库连接
    FAQ_2
    JAVA VUser
    FAQ_1
    LoadRunner中的Web 函数列表
    MySQL性能诊断与调优
    LoadRunner书籍推荐
  • 原文地址:https://www.cnblogs.com/wangyuehome/p/3039902.html
Copyright © 2011-2022 走看看