如果有人還不了解ViewHolder為什么可以起到優(yōu)化作用,
我這邊再做下簡(jiǎn)單說(shuō)明:
Android的findViewById動(dòng)作是比較耗時(shí)的,需要遍歷布局的樹(shù)形結(jié)構(gòu),才能找到相應(yīng)的視圖。所以如果想在這一塊進(jìn)行優(yōu)化,我們就需要把find過(guò)后的內(nèi)容進(jìn)行緩存,所以就用ViewHolder的方法。
這個(gè)方法很容易理解,但是可能有些人還是比較較真,就像我,這樣可以起到緩存作用,那為什么內(nèi)部類非得要聲明成static的呢,普通的內(nèi)部類不是也起到這樣的效果嗎?這個(gè)疑問(wèn)也困擾了我很久。知道我看了《Effective java》這本書(shū),才解開(kāi)我這個(gè)困惑,原來(lái)這不是Android的優(yōu)化,而是Java提倡的優(yōu)化。
《Effective Java》第22條 優(yōu)先考慮靜態(tài)成員類
其中有條建議:
如果聲明成員類不要求訪問(wèn)外圍實(shí)例,就要始終把static修飾符放在它的聲明中,是它成為靜態(tài)成員類,而不是非靜態(tài)成員類。
因?yàn)榉庆o態(tài)成員類的實(shí)例會(huì)包含一個(gè)額外的指向外圍對(duì)象的引用,保存這份引用要消耗時(shí)間和空間,并且導(dǎo)致外圍類實(shí)例符合垃圾回收時(shí)仍然被保留。如果沒(méi)有外圍實(shí)例的情況下,也需要分配實(shí)例,就不能使用非靜態(tài)成員類,因?yàn)榉庆o態(tài)成員類的實(shí)例必須要有一個(gè)外圍實(shí)例。
原文地址:http://blog.csdn.net/caoyang521/article/details/49847881
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注