),謝謝支援!
android之listview效能優化
假設有看過我寫過的15k面試題的朋友們一定知道。listview的優化方式有下面幾種:
重用了convertview
viewholder
static class viewholder
在列表裡面有的情況下,監聽滑動不載入
以上是大致的說了下面,應付面試已經足夠了。假設要使用到專案中,可能有些剛開始學習的人就迷茫了。
接下來我具體的說一下。這個是怎樣優化的。
重用了convertview
getview這種方法會呼叫的次數是你們的資料條目數*2,
重用了convertview,非常大程度上的降低了記憶體的消耗。通過推斷convertview是否為null,是的話就須要產生乙個檢視出來,然後給這個檢視資料,最後將這個檢視返回給底層,呈獻給使用者。
特點:假設當前的convertview為null,則通過layoutinflat產生乙個view。
public view getview(int position,view convertview,viewgroup parent)
textviewtv_name=(textview)convertview.findviewbyid(r.id.contact_contactinfoitem_tv_name);
textviewtv_phone=(textview)convertview.findviewbyid(r.id.contact_contactinfoitem_tv_phonenum);
contactinfo1confo=contacts.get(position);
if(confo!=null)
return convertview;
}
viewholder
上面的寫法會有乙個缺點,就是每次在getview的時候,都須要又一次的findviewbyid。又一次找到控制項,然後進行控制項的賦值以及事件對應設定。這樣事實上在做反覆的事情。由於的geiview中。事實上包括有這些控制項,並且這些控制項的id還都是一樣的,也就是事實上僅僅要在view中findviewbyid一次,後面無須要每次都要findviewbyid了。
以下給出另外一種寫法
寫發的特點,通常有乙個內部類classviewholder,這個viewholder,用來標識view中一些控制項,方便進行一些事件對應操作的設定,比方onclick等等,這樣能夠不用每次都要findviewbyid了,降低了效能的消耗。同一時候重用了convertview。非常大程度上的降低了記憶體的消耗。
public view getview(int position,view convertview,viewgroup parent)
else
contactinfo1confo=contacts.get(position);
log.i("my","confo"+confo.getcontactname());
if(confo!=null)
return convertview;
} classviewholder
static class viewholder
把以上兩種結合起來。然後把
viewholder為static,也就是靜態的,靜態類僅僅會在第一次載入時會耗費比較長時間。可是後面就能夠非常好幫助載入,
同一時候保證了記憶體中僅僅有乙個viewholder,節省了記憶體的開銷。
我們會發現不管是什麼adapter都是這些優化的方式,所以大家肯定思考會沒有一種方法能夠把**重用的部分抽出來,
假設有這樣的想法的朋友能夠看下我寫的這篇adapter**優化
在列表裡面有的情況下,監聽滑動不載入
還有一種情況,就是乙個列表載入非常多,在還沒載入下來的時候,高速的滑動列表,會發現卡頓的現象發生。
這樣的情況我們就須要監聽。listview的滑動監聽裡面設定不載入。滑動停止開始載入。
1、推斷listview狀態
abslistview.onscrolllistener onscrolllistener = new abslistview.onscrolllistener()
public void onscrollstatechanged(abslistview view, int scrollstate) }};
2、獲取當前螢幕上顯示的items:
mlistview.getfirstvisibleposition();
mlistview.getlastvisibleposition();
南京學思XSuperNEST中ListView優化
xsupernest用listview把資料展示給使用者,為了更好的增強使用者體驗,我們要對其進行進一步的優化。1 首先,雖然大家都知道,還是提一下,利用好 convertview 來重用 view,切忌每次 getview 都新建。listview 的核心原理就是重用 view。listview ...
博學之,審問之,慎思之,明辨之,篤行之
禮記 中庸 十九章有云 博學之,審問之,慎思之,明辨之,篤行之。這說的是為學的幾個層次,或者說是幾個遞進的階段。博學之 意謂為學首先要廣泛的獵取,培養充沛而旺盛的好奇心。好奇心喪失了,為學的慾望隨之而消亡,博學遂為不可能之事。博 還意味著博大和寬容。惟有博大和寬容,才能相容幷包,使為學具有世界眼光和...
接觸之,熟悉之,打破之
接觸之,熟悉之,打破之 拿破崙小時候就是孩子王,不管同夥伴們玩什麼遊戲,它總是贏家。同時,它更善於改變遊戲規則,以便能夠發揮他自己的優勢。如果能夠成為遊戲規則的左右者,那麼,在當今商戰中必定是最大的贏家。我們處在乙個有著各種各樣遊戲規則的大環境中,每時每刻都要面對不同的遊戲規則,轉換不同的角色,讓自...