andoid x项目的优化 1
通常我們寫(xiě)程序,都是在項(xiàng)目計(jì)劃的壓力下完成的,此時(shí)完成的代碼可以完成具體業(yè)務(wù)邏輯,但是性能不一定是最優(yōu)化的,一般來(lái)說(shuō),一般來(lái)說(shuō),優(yōu)秀的程序員在寫(xiě)完代碼之后都會(huì)不斷的對(duì)代碼進(jìn)行重構(gòu)。重構(gòu)的好處有很多,其中一點(diǎn),就是對(duì)代碼進(jìn)行優(yōu)化,提高軟件的性能。下面我們就從幾個(gè)方面來(lái)了解Android開(kāi)發(fā)過(guò)程中的代碼優(yōu)化。
?
1)靜態(tài)變量引起內(nèi)存泄露
在代碼優(yōu)化的過(guò)程中,我們需要對(duì)代碼中的靜態(tài)變量特別留意。靜態(tài)變量是類相關(guān)的變量,它的生命周期是從這個(gè)類被聲明,到這個(gè)類徹底被垃圾回收器回收才會(huì)被銷(xiāo)毀。所以,一般情況下,靜態(tài)變量從所在的類被使用開(kāi)始就要一直占用著內(nèi)存空間,直到程序退出。如果不注意,靜態(tài)變量引用了占用大量?jī)?nèi)存的資源,造成垃圾回收器無(wú)法對(duì)內(nèi)存進(jìn)行回收,就可能造成內(nèi)存的浪費(fèi)。
?
2:使用Application 的Context
? ? ?在android 中 ,Application Context 的生命周期一樣長(zhǎng),而不是取決于某個(gè)Activty 的生命周期,如果想保持一個(gè)長(zhǎng)期生命的對(duì)象,并且這個(gè)對(duì)象
在這里將this.getResources()修改為this.getApplication().getResources()。修改以后,Resources對(duì)象擁有的是Application對(duì)象的引用。如果Activity被重新創(chuàng)建,第一次創(chuàng)建的Activity就可以被回收了。
3)及時(shí)關(guān)閉資源
Cursor是Android查詢數(shù)據(jù)后得到的一個(gè)管理數(shù)據(jù)集合的類。正常情況下,如果我們沒(méi)有關(guān)閉它,系統(tǒng)會(huì)在回收它時(shí)進(jìn)行關(guān)閉,但是這樣的效率特別低。如果查詢得到的數(shù)據(jù)量較小時(shí)還好,如果Cursor的數(shù)據(jù)量非常大,特別是如果里面有Blob信息時(shí),就可能出現(xiàn)內(nèi)存問(wèn)題。所以一定要及時(shí)關(guān)閉Cursor。
?
即對(duì)異常進(jìn)行捕獲,并且在finally中將cursor關(guān)閉。
同樣的,在使用文件的時(shí)候,也要及時(shí)關(guān)閉。
?
?
4)使用Bitmap及時(shí)調(diào)用recycle()
前面的章節(jié)講過(guò),在不使用Bitmap對(duì)象時(shí),需要調(diào)用recycle()釋放內(nèi)存,然后將它設(shè)置為null。雖然調(diào)用recycle()并不能保證立即釋放占用的內(nèi)存,但是可以加速Bitmap的內(nèi)存的釋放。
在代碼優(yōu)化的過(guò)程中,如果發(fā)現(xiàn)某個(gè)Activity用到了Bitmap對(duì)象,卻沒(méi)有顯式的調(diào)用recycle()釋放內(nèi)存,則需要分析代碼邏輯,增加相關(guān)代碼,在不再使用Bitmap以后調(diào)用recycle()釋放內(nèi)存
?
?
當(dāng)向上滾動(dòng)ListView時(shí),getView()方法會(huì)被反復(fù)調(diào)用。getView()的第二個(gè)參數(shù)convertView是被緩存起來(lái)的List條目中的View對(duì)象。當(dāng)ListView滑動(dòng)的時(shí)候,getView可能會(huì)直接返回舊的convertView。這里使用了convertView和ViewHolder,可以充分利用緩存,避免反復(fù)創(chuàng)建View對(duì)象和TextView對(duì)象。
如果ListView的條目只有幾個(gè),這種技巧并不能帶來(lái)多少性能的提升。但是如果條目有幾百甚至幾千個(gè),使用這種技巧只會(huì)創(chuàng)建幾個(gè)convertView和ViewHolder(取決于當(dāng)前界面能夠顯示的條目數(shù)),性能的差別就非常非常大了
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/jiangu66/p/3192204.html
總結(jié)
以上是生活随笔為你收集整理的andoid x项目的优化 1的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 关于js中namespace命名空间模式
- 下一篇: u-boot的nand驱动写过程分析