Android優化列表的卡頓現象
阿新 • • 發佈:2019-01-02
重要的一點:不要在主執行緒進行耗時操作即可提高滑動的流暢度
- 不要在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"