提高ListView效能的技巧

2021-07-08 10:58:59 字數 2361 閱讀 6447

listview優化一直是乙個老生常談的問題,不管是面試還是平常的開發中,listview永遠不會被忽略掉,那麼這篇文章我們來看看如何最大化的優化listview的效能。不要在你的getview()中寫過多的邏輯**,我們可以將這些**放在別的地方,例如:

優化前的getview():

@override

publicview getview(intposition, view convertview, viewgroup paramviewgroup)else

//在這裡進行邏輯判斷,這是有問題的

if(doessomecomplexchecking())else

// 這是設定

image

的引數,每次

getview

方法執行時都會執行這段**,這顯然是有問題的

relativelayout.layoutparams imageparams =newrelativelayout.layoutparams(measuredwidth, rowheight);

holder.eventposter.setlayoutparams(imageparams);

returnconvertview;

}

優化後的getview():
@override

publicview getview(intposition, view convertview, viewgroup paramviewgroup)else

// 我們直接通過物件的

getter

方法代替剛才那些邏輯判斷,那些邏輯判斷放到別的地方去執行了

holder.threedimension.setvisibility(object.getvisibility());

returnconvertview;

}

當你建立了大量的物件的時候,gc就會頻繁的執行,所以在getview()方法中不要建立很多的物件,最好的優化是,不要在viewholder以外建立任何物件,如果你的你的log裡面發現「gc has freed some memory」頻繁出現的話,那你的程式肯定有問題了。你可以檢查一下:

a) item布局的層級是否太深

b) getview()方法中是否有大量物件存在

c) listview的布局屬性

listview.setonscrolllistener(newonscrolllistener()else

}@override

public voidonscroll (abslistview view,intfirstvisibleitem,intvisibleitemcount,

inttotalitemcount)

});

scrollingcache:scrollingcache本質上是drawing cache,你可以讓乙個view將他自己的drawing儲存在cache中(儲存為乙個bitmap),這樣下次再顯示view的時候就不用重畫了,而是從cache中取出。預設情況下drawing cahce是禁用的,因為它太耗記憶體了,但是它確實比重畫來的更加平滑。而在listview中,scrollingcache是預設開啟的,我們可以手動將它關閉。

animatecache:listview預設開啟了animatecache,這會消耗大量的記憶體,因此會頻繁呼叫gc,我們可以手動將它關閉掉

優化前的listview

我們應該儘量減少item布局深度,因為當滑動listview的時候,這回直接導致測量與繪製,因此會浪費大量的時間,所以我們應該將一些不必要的布局巢狀關係去掉。減少item布局深度

這個大家應該非常熟悉了,但是不要小看這個viewholder,它可以大大提高我們listview的效能

listview的優化我們已經講完了,如果在你的專案中,這些基本優化你還沒有做到的話,那麼你的listview是有問題的,還有很大的提公升潛力,以後再使用listview的時候,一定要將這幾點考慮進去,發揮它的最大的效能。

提高canvas效能技巧

錯誤 var canvas document.getelementbyid mycanvas var context this.canvas.getcontext 2d var drawasync eval jscex.compile async function drawasync start 正...

提高canvas效能技巧

參考文章 總結 1 少用drawimage,能將多張圖拼成一張,盡量多拼 2 drawimage的時候,用上全部引數,也就是用上sprite技術 3 只做少量的,必要的碰撞檢測 4 使用整型,少用浮點型 5 讓動畫基於時間,別基於幀,幀不可靠,基於時間可以更平滑 6 文字繪製的成本很高 7 使用預渲...

幾個提高JDBC效能的技巧

1.使用資料連線池 connection pool 避免使用 drivermanager.getconnection,參考另外一篇部落格 不推薦使用drivermanager.getconnection 2.合理的配置資料連線池引數,參考另外一篇部落格 如何設定資料連線池的初始大小 3.選擇合適的事...