ym Android之ListView效能優化

2021-09-07 03:21:32 字數 2381 閱讀 1989

),謝謝支援!

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 ...

博學之,審問之,慎思之,明辨之,篤行之

禮記 中庸 十九章有云 博學之,審問之,慎思之,明辨之,篤行之。這說的是為學的幾個層次,或者說是幾個遞進的階段。博學之 意謂為學首先要廣泛的獵取,培養充沛而旺盛的好奇心。好奇心喪失了,為學的慾望隨之而消亡,博學遂為不可能之事。博 還意味著博大和寬容。惟有博大和寬容,才能相容幷包,使為學具有世界眼光和...

接觸之,熟悉之,打破之

接觸之,熟悉之,打破之 拿破崙小時候就是孩子王,不管同夥伴們玩什麼遊戲,它總是贏家。同時,它更善於改變遊戲規則,以便能夠發揮他自己的優勢。如果能夠成為遊戲規則的左右者,那麼,在當今商戰中必定是最大的贏家。我們處在乙個有著各種各樣遊戲規則的大環境中,每時每刻都要面對不同的遊戲規則,轉換不同的角色,讓自...