下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
【移動(dòng)應(yīng)用開發(fā)技術(shù)】Android小白的成長(zhǎng)之路-ListView優(yōu)化提案
在android開發(fā)中Listview是一個(gè)很重要的組件,它以列表的形式根據(jù)數(shù)據(jù)的長(zhǎng)自適應(yīng)展示具體內(nèi)容,用戶可以自由的定義listview每一列的布局,但當(dāng)listview有大量的數(shù)據(jù)需要加載的時(shí)候,會(huì)占據(jù)大量?jī)?nèi)存,影響性能。本文的重點(diǎn)即是從如下幾個(gè)方面介紹如何對(duì)ListView進(jìn)行優(yōu)化。1、convertView重用利用好convertView來(lái)重用View,切忌每次getView()都新建。ListView的核心原理就是重用View,如果重用view不改變寬高,重用View可以減少重新分配緩存造成的內(nèi)存頻繁分配/回收;ListView的android:layout_height屬性值設(shè)置為"fill_parent"或者''wrap_content"情況不一樣,但是convertView的機(jī)制一樣如果設(shè)置為fill_parent:屏幕上顯示出的Item的convertview都為空,向下滑動(dòng)新產(chǎn)生的Item的convetview都不為空如果設(shè)置為wrap_content:只有第一個(gè)Item的convertview為null,其他的不為空總結(jié):在初始顯示的時(shí)候,每次顯示一個(gè)item都調(diào)用一次getview方法但是每次調(diào)用的時(shí)候covertview為空(因?yàn)檫€沒(méi)有舊的view),當(dāng)顯示完了之后。如果屏幕移動(dòng)了之后,并且導(dǎo)致有些Item(也可以說(shuō)是view)跑到屏幕外面,此時(shí)如果還有新的item需要產(chǎn)生,則這些item顯示時(shí)調(diào)用的getview方法中的convertview參數(shù)就不是null,而是那些移出屏幕的view(舊view),我們所要做的就是將需要顯示的item填充到這些回收的view(舊view)中去,最后注意convertview為null的不僅僅是初始顯示的那些item,還有一些是已經(jīng)開始移入屏幕但是還沒(méi)有view被回收的那些item。2、ViewHolder優(yōu)化使用ViewHolder的原因是findViewById方法耗時(shí)較大,如果控件個(gè)數(shù)過(guò)多,會(huì)嚴(yán)重影響性能,而使用ViewHolder主要是為了可以省去這個(gè)時(shí)間。通過(guò)setTag,getTag直接獲取View總結(jié):view的setTag和getTag方法其實(shí)很簡(jiǎn)單,在實(shí)際編寫代碼的時(shí)候一個(gè)view不僅僅是為了顯示一些字符串、圖片,有時(shí)我們還需要他們攜帶一些其他的數(shù)據(jù)以便我們對(duì)該view的識(shí)別或者其他操作。于是android的設(shè)計(jì)者們就創(chuàng)造了setTag(Object)方法來(lái)存放一些數(shù)據(jù)和view綁定,我們可以理解為這個(gè)是view的標(biāo)簽也可以理解為view作為一個(gè)容器存放了一些數(shù)據(jù)。而這些數(shù)據(jù)我們也可以通過(guò)getTag()方法來(lái)取出來(lái)。到這里setTag和getTag大家應(yīng)該已經(jīng)明白了。再回到上面的話題,我們通過(guò)convertview的setTag方法和getTag方法來(lái)將我們要顯示的數(shù)據(jù)來(lái)綁定在convertview上。如果convertview是第一次展示我們就創(chuàng)建新的Holder對(duì)象與之綁定,并在最后通過(guò)returnconvertview返回,去顯示;如果convertview是回收來(lái)的那么我們就不必創(chuàng)建新的holder對(duì)象,只需要把原來(lái)的綁定的holder取出加上新的數(shù)據(jù)就行了3、圖片加載優(yōu)化如果ListView需要加載顯示網(wǎng)絡(luò)圖片,我們盡量不要在ListView滑動(dòng)的時(shí)候加載圖片,那樣會(huì)使ListView變得卡頓,所以我們需要在監(jiān)聽器里面監(jiān)聽ListView的狀態(tài),如果ListView滑動(dòng)(SCROLL_STATE_TOUCH_SCROLL)或者被猛滑(SCROLL_STATE_FLING)的時(shí)候,停止加載圖片,如果沒(méi)有滑動(dòng)(SCROLL_STATE_IDLE),則開始加載圖片。4、onClickListener處理當(dāng)ListView的item中有比如button這些子view時(shí),需要對(duì)其設(shè)置onclickListener,通常的寫法是在getView方法中一個(gè)個(gè)設(shè)置,比如holder.img.setonClickListener(newonClickListenr)...但是這種寫法每次調(diào)用getView時(shí)都設(shè)置了一個(gè)新的onClick事件,效率很低。高效的寫法可以直接在ViewHolder中設(shè)置一個(gè)position,然后viewHolderimplementsOnClickListenr補(bǔ)充:ListView的listitem里面含有Button
CheckBox之類的子控件的時(shí)候,子控件會(huì)把Focus搶去,最簡(jiǎn)單有效的解決方法是在ListView的item布局文件根元素中設(shè)置屬性
android:descendantFocusability="blocksDescendants"5、減少ItemView的布局層級(jí)這是所有l(wèi)ayout都必須遵循的,布局層級(jí)過(guò)深會(huì)直接導(dǎo)致View的測(cè)量與繪制浪費(fèi)大量的時(shí)間6、adapter中的getView方法盡量少使用邏輯不要在getView方法中做過(guò)于復(fù)雜的邏輯,可以想辦法抽離到別的地方7、adapter中的getView方法盡量少做耗時(shí)操作8、adapter中的getView方法避免創(chuàng)建大量對(duì)象9、將ListView的scrollingCache和animateCache設(shè)置為false這兩個(gè)屬性,默認(rèn)情況下是開啟的,會(huì)消耗大量的內(nèi)存,因此會(huì)頻繁調(diào)用GC,我們可以手動(dòng)將它關(guān)閉掉(視情況而定)其它1、利用好ViewType,例如你的ListView中有幾個(gè)類型的Item,需要給每個(gè)類型創(chuàng)建不同的View,這樣有利于ListView的回收,當(dāng)然類型不能太多2、善用自定義View,自定義View可以有效的減小Layout的層級(jí),而且對(duì)繪制過(guò)程可以很好的控制;3、盡量能保證Adapter的hasStableIds()返回true,這樣在notifyDataSetChanged()的時(shí)候,如果id不變,Li
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 幾何學(xué)基礎(chǔ)教學(xué)模板
- 2024年春季小學(xué)《弟子規(guī)》教案發(fā)布
- 凍干食品合作協(xié)議合同范本
- 統(tǒng)編版小學(xué)語(yǔ)文五年級(jí)下冊(cè)第二單元試卷
- 2024簡(jiǎn)易協(xié)議管理軟件解決方案
- 5《秋天的懷念》同步練習(xí)含答案統(tǒng)編版語(yǔ)文七年級(jí)上冊(cè)
- 戀愛(ài)賣身合同范本
- Visio2024教程:自動(dòng)化辦公解決方案
- 崇文區(qū)?;房爝f合同范本
- 城區(qū)改造渣土清理與運(yùn)輸服務(wù)協(xié)議樣本
- 醫(yī)院健康教育培訓(xùn)課件
- GH/T 1419-2023野生食用菌保育促繁技術(shù)規(guī)程灰肉紅菇
- 鼻咽癌的放射治療課件
- 明孝端皇后九龍九鳳冠
- 注塑車間規(guī)劃方案
- 營(yíng)養(yǎng)不良五階梯治療
- 標(biāo)本運(yùn)送培訓(xùn)課件
- 護(hù)士與醫(yī)生的合作與溝通
- GB 42295-2022電動(dòng)自行車電氣安全要求
- 產(chǎn)品系統(tǒng)設(shè)計(jì)開發(fā) 課件 第4、5章 產(chǎn)品系統(tǒng)設(shè)計(jì)類型、產(chǎn)品系統(tǒng)設(shè)計(jì)開發(fā)綜合案例
- 1編譯原理及實(shí)現(xiàn)課后題及答案
評(píng)論
0/150
提交評(píng)論