ListView不得不說是Android中最難用的控件之一,說它難用主要是因為它有太多的細節可以優化。那么下面就介紹幾種ListView優化的方法。
其實ListView的優化主要分為以下三個方面:
1)采用ViewHolder并避免在getView中執行耗時操作。
2)根據列表的滑動狀態來控制任務的執行頻率。
3)嘗試開啟硬件加速來使ListView的滑動更加流暢。
1)不要再getView中執行耗時操作。例如不要再getView方法中加載圖片,因為加載圖片是一個耗時操作,必然會導致卡頓,所以加載圖片應該使用異步的方式來處理,例如ImageLoader。同時也應該減少findViewById方法的執行,因為這個方法也是要消耗資源的。所以應該定義一個ViewHolder來管理這些id,然后通過tag去直接獲取id。復用convertView也是很好的辦法,不然若是有上萬的數據,當我們滑動ListView時,就會產生上萬的convertView,這對內存的消耗是難以想象的。
2)控制異步任務的執行頻率也是很重要的。對ListView來說,僅僅在getView方法中采取異步操作是不夠的。若是用戶大量頻繁的去滑動列表,就會在一瞬間產生大量的UI更新操作,這些異步任務都是在主線程執行的,就會造成線程池阻塞,也是會導致卡頓的。那么我們可以考慮在列表滑動的時候停止加載部分資源,例如圖片。等待列表停下來再去加載這些。具體實現就是去設置在OnScrollListener中去監聽onScrollStateChanged的方法中判斷列表是否處于滑動狀態即可。同時,分頁加載,預加載也是很好的方式。
此外,還有一些辦法,例如列表中有圖片的時候可以對圖片進行一些優化,例如對圖片進行壓縮,加載圖片的時候采用三級緩存。
3)硬件加速,硬件加速只需要設置--android:hardwareAccelerate="true"即可。
此外,對ListView的優化方法也同時適用于GridView。