重要的一點:不要在主線程進行耗時操作即可提高滑動的流暢度
- 不要在getView中執行耗時操作。直接在getView中加載圖片肯定會卡頓,因爲加載圖片是耗時操作,這種操作必須採用異步的方式處理,如ImageLoader中的實現
- 控制異步任務的執行頻率,getView中使用ImageLoader的bindBitmap方法異步加載圖片,但是當用戶頻繁的上下滑動,這樣一瞬間會有上百個異步任務,這些異步任務會造成線程池的擁堵並隨即帶來大量的UI更新。這個時候可以考慮在列表滑動的時候不加載圖片,停止時加載圖片
例如:
public void onScrollStateChanged(AbsListView view, int scrollState) {
if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_IDLE) {
mIsGridViewIdle = true;
mImageAdapter.notifyDataSetChanged();
} else {
mIsGridViewIdle = false;
}
}
然後在getView中判斷:
if (mIsGridViewIdle && mCanGetBitmapFromNetWork) {
imageView.setTag(R.id.imageloader_uri,uri);
Glide.with(getApplicationContext()).load(uri).placeholder(R.drawable.image_default).crossFade().into(imageView);
//mImageLoader.bindBitmap(uri, imageView, mImageWidth, mImageWidth);
}
- 硬件加速:設置
android:hardwareAccelerated="true"