android Gridview圖片異步加載的要領

wgrd5626 8年前發布 | 7K 次閱讀 Android開發 移動開發

關于GridView或者是ListView異步加載圖片的文章數不勝數,總結起來就是:

1.高效率的緩存機制(文件緩存和LruCache并用)

2.圖片的壓縮方式,盡可能節省內存

3.UI刷新的頻率

   其中第三點,UI刷新的頻率指的是在滑動過程中,當圖片加載完,ImageView都會有setImageBitmap這種更新UI的事件,如果在同一時間內有好幾個線程同時完成圖片的加載,由于是在滾動過程中,會造成輕微的卡頓。

   解決的辦法一般是在滑動的時候暫停加載,當滑動停止再繼續完成加載,或者是滑動比較快的時候暫停加載,滑動慢下來了再去加載,我比較喜歡第二種,不過你需要得到這個滑動速度,如何獲得請看這篇文章:

如何獲得ListView當前的滾動速度

   但是還有一點被忽略的是開啟的線程數目其實也會影響到這個流暢度,線程數目并不是越多越好,如果一下子開啟了50個線程,那么這50個線程如果完成時間差別不大,也會導致UI刷新頻率過高。一般我們使用線程池來管理線程的數目。過多的線程數目不僅會直接導致cpu負載過高,還會因為UI刷新頻繁影響UI線程的流暢性。

   實際上,一般線程池的數目在小于5比較合適,而且我還發現如果線程數目在3以下,上面提到的滑動比較快的時候去暫停加載這個方案是可以棄用的,因為線程數目較少(比如線程池大小為2),滑動再快同時也只會刷新兩張圖片。所以最好的解決方案是采用容量較小的線程池,同時不再考慮滾動(或者滾動過快)時是否加載的問題,如果你還是一定要考慮,那暫停加載的時機也最好是速度較大的時候。總之在線程池數目與暫停加載之間找到一個平衡點吧。



 本文由用戶 wgrd5626 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!