ListView的使用的一丟丟經驗

在使用listview的過程中,會碰到滑動卡頓的問題。這個問題尤其在item view的佈局比較複雜的時候存在。帶來的使用體驗會很差,在一些較低端的設備上,甚至有可能發生anr。

  1. 使用viewHolder
    這個其實已經算是一個很基礎、近乎標準的東東了,但是毋庸置疑它很重要。

  2. 避免過度繪製
    android 每隔16ms,也就是60fps會發出一個VSYNC信號,通知渲染UI,如果渲染時間過久,就會導致卡頓。更詳細的所以減少過度繪製是及其有必要的。
    具體的方法可以在手機的開發者選項中找到“調試GPU過度繪製“,打開這個功能,顏色越鮮豔的表明過度繪製的程度越強。根據這個,去檢查自己的視圖,是不是有冗餘的layout嵌套,是不是有沒用的layout等等。

  3. 不在getview中進行耗時操作
    這個是不論mvc還是mvp的開發模式都有的理念:view只負責顯示視圖,不去做數據的處理或者業務邏輯的處理,應該丟給model去搞。事實上,我在很多地方看到的,在getView方法中一大堆的邏輯,還有耗時處理。
    一個明顯的例子就是把表情的轉換放在getview中。儘管已經有了viewHolder機制,但是getview仍然是被頻繁使用的方法,如果表情轉換的算法寫的一般(甚至很渣),如果用戶要同時顯示很多表情,那麼卡頓就無法避免。
    如果getView中的item視圖有耗時的動畫效果,也建議使用surfaceView在子線程處理。

  4. 儘量不在getView中new 實例
    因爲getView是很頻繁調用的,在裏面new 會導致滑動的時候一大堆實例分配內存,虛擬機會對其進行GC,GC的時候會卡頓主線程,導致頁面卡頓。

  5. 滑動停止再加載image
    遇到listview加載圖片等,應該當停止滑動的時候去加載。否則可能會浪費大量資源。

  6. 必要時啓用硬件加速。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章