


下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】Android小白的成長之路-ListView優(yōu)化提案
在android開發(fā)中Listview是一個很重要的組件,它以列表的形式根據(jù)數(shù)據(jù)的長自適應(yīng)展示具體內(nèi)容,用戶可以自由的定義listview每一列的布局,但當(dāng)listview有大量的數(shù)據(jù)需要加載的時候,會占據(jù)大量內(nèi)存,影響性能。本文的重點(diǎn)即是從如下幾個方面介紹如何對ListView進(jìn)行優(yōu)化。1、convertView重用利用好convertView來重用View,切忌每次getView()都新建。ListView的核心原理就是重用View,如果重用view不改變寬高,重用View可以減少重新分配緩存造成的內(nèi)存頻繁分配/回收;ListView的android:layout_height屬性值設(shè)置為"fill_parent"或者''wrap_content"情況不一樣,但是convertView的機(jī)制一樣如果設(shè)置為fill_parent:屏幕上顯示出的Item的convertview都為空,向下滑動新產(chǎn)生的Item的convetview都不為空如果設(shè)置為wrap_content:只有第一個Item的convertview為null,其他的不為空總結(jié):在初始顯示的時候,每次顯示一個item都調(diào)用一次getview方法但是每次調(diào)用的時候covertview為空(因?yàn)檫€沒有舊的view),當(dāng)顯示完了之后。如果屏幕移動了之后,并且導(dǎo)致有些Item(也可以說是view)跑到屏幕外面,此時如果還有新的item需要產(chǎn)生,則這些item顯示時調(diào)用的getview方法中的convertview參數(shù)就不是null,而是那些移出屏幕的view(舊view),我們所要做的就是將需要顯示的item填充到這些回收的view(舊view)中去,最后注意convertview為null的不僅僅是初始顯示的那些item,還有一些是已經(jīng)開始移入屏幕但是還沒有view被回收的那些item。2、ViewHolder優(yōu)化使用ViewHolder的原因是findViewById方法耗時較大,如果控件個數(shù)過多,會嚴(yán)重影響性能,而使用ViewHolder主要是為了可以省去這個時間。通過setTag,getTag直接獲取View總結(jié):view的setTag和getTag方法其實(shí)很簡單,在實(shí)際編寫代碼的時候一個view不僅僅是為了顯示一些字符串、圖片,有時我們還需要他們攜帶一些其他的數(shù)據(jù)以便我們對該view的識別或者其他操作。于是android的設(shè)計(jì)者們就創(chuàng)造了setTag(Object)方法來存放一些數(shù)據(jù)和view綁定,我們可以理解為這個是view的標(biāo)簽也可以理解為view作為一個容器存放了一些數(shù)據(jù)。而這些數(shù)據(jù)我們也可以通過getTag()方法來取出來。到這里setTag和getTag大家應(yīng)該已經(jīng)明白了。再回到上面的話題,我們通過convertview的setTag方法和getTag方法來將我們要顯示的數(shù)據(jù)來綁定在convertview上。如果convertview是第一次展示我們就創(chuàng)建新的Holder對象與之綁定,并在最后通過returnconvertview返回,去顯示;如果convertview是回收來的那么我們就不必創(chuàng)建新的holder對象,只需要把原來的綁定的holder取出加上新的數(shù)據(jù)就行了3、圖片加載優(yōu)化如果ListView需要加載顯示網(wǎng)絡(luò)圖片,我們盡量不要在ListView滑動的時候加載圖片,那樣會使ListView變得卡頓,所以我們需要在監(jiān)聽器里面監(jiān)聽ListView的狀態(tài),如果ListView滑動(SCROLL_STATE_TOUCH_SCROLL)或者被猛滑(SCROLL_STATE_FLING)的時候,停止加載圖片,如果沒有滑動(SCROLL_STATE_IDLE),則開始加載圖片。4、onClickListener處理當(dāng)ListView的item中有比如button這些子view時,需要對其設(shè)置onclickListener,通常的寫法是在getView方法中一個個設(shè)置,比如holder.img.setonClickListener(newonClickListenr)...但是這種寫法每次調(diào)用getView時都設(shè)置了一個新的onClick事件,效率很低。高效的寫法可以直接在ViewHolder中設(shè)置一個position,然后viewHolderimplementsOnClickListenr補(bǔ)充:ListView的listitem里面含有Button
CheckBox之類的子控件的時候,子控件會把Focus搶去,最簡單有效的解決方法是在ListView的item布局文件根元素中設(shè)置屬性
android:descendantFocusability="blocksDescendants"5、減少ItemView的布局層級這是所有l(wèi)ayout都必須遵循的,布局層級過深會直接導(dǎo)致View的測量與繪制浪費(fèi)大量的時間6、adapter中的getView方法盡量少使用邏輯不要在getView方法中做過于復(fù)雜的邏輯,可以想辦法抽離到別的地方7、adapter中的getView方法盡量少做耗時操作8、adapter中的getView方法避免創(chuàng)建大量對象9、將ListView的scrollingCache和animateCache設(shè)置為false這兩個屬性,默認(rèn)情況下是開啟的,會消耗大量的內(nèi)存,因此會頻繁調(diào)用GC,我們可以手動將它關(guān)閉掉(視情況而定)其它1、利用好ViewType,例如你的ListView中有幾個類型的Item,需要給每個類型創(chuàng)建不同的View,這樣有利于ListView的回收,當(dāng)然類型不能太多2、善用自定義View,自定義View可以有效的減小Layout的層級,而且對繪制過程可以很好的控制;3、盡量能保證Adapter的hasStableIds()返回true,這樣在notifyDataSetChanged()的時候,如果id不變,Li
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 油茶承包協(xié)議書
- 生產(chǎn)調(diào)度培訓(xùn)教材
- 油墨合同協(xié)議書
- 公職人員廉政協(xié)議書
- 遷移墳?zāi)褂霉ず贤瑓f(xié)議
- 車輛批量采購合同協(xié)議
- 車輛私人定制合同協(xié)議
- 抖音用戶服務(wù)協(xié)議
- 旅游咨詢顧問服務(wù)合同
- 農(nóng)村房屋改造與翻建協(xié)議
- 英語四級單詞表4500
- 2025-2030年中國再制造行業(yè)當(dāng)前現(xiàn)狀及未來趨勢發(fā)展預(yù)測研究報告
- 數(shù)據(jù)資產(chǎn)的會計(jì)確認(rèn)與計(jì)量研究
- 2025華遠(yuǎn)國際陸港集團(tuán)所屬企業(yè)校園招聘113人筆試參考題庫附帶答案詳解
- 《尋找消失的分?jǐn)?shù)》期中考試分析班會課件
- 合伙買房合同協(xié)議
- 丁集礦井1.8Mt-a新井設(shè)計(jì)-煤礦沖擊礦壓
- 魚塘項(xiàng)目可行性研究報告
- 2024年世界職業(yè)院校技能大賽高職組“化學(xué)實(shí)驗(yàn)技術(shù)”賽項(xiàng)參考試題庫(含答案)
- 數(shù)學(xué)活動5用不等式解決實(shí)際問題和猜猜哪個數(shù)最大(課件)人教版七年級數(shù)學(xué)下冊
- 燒傷病人的護(hù)理課件
評論
0/150
提交評論