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