不要在主线程执行耗时操作,可以从以下三个方面来说明这个问题:
1,不要在getView中执行耗时操作
解决方案:通过异步的方式处理
2、控制异步操作的频率,如果频繁的上下滑动,这样会产生大量的异步任务,这些异步任务容易造成阻塞,并造成大量的UI更新操作,这是没有意义的,由于一瞬间存在大量的ui更新操作,这些UI往往运行在主线程,这样就会造成卡顿的现象
解决方案:我们可以给listview或者gridView添加onScrollListener(),并在onScrollListener的onScrollStateChange方法中判断列表是否处于滑动状态,如果是就停止加载图片,代码如下:
private boolean isListViewIdle = true;//表示是否处于滑动状态
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
//停止滑动状态
if(scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE){
isListViewIdle = true;
fruitAdapter.notifyDataSetChanged();
}else {//滑动状态
isListViewIdle = false;
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
});
然后在getView中,仅当方法静止的时候才加载图片:
if(isListViewIdle){
ImageView.setTag(url);
mImageLoader.bingBitmap(url,ImageView,mImageWidth,mImageHeight)
}
一般来说,经过上面两个步骤,列表就不会有什么卡顿了,但是 偶偶还是会出现卡顿,硬件加速可以解决莫名的卡段问题,
android:hardwareAccelerated = "true"即可为Activity开启硬件加速。