Android進(jìn)階之性能優(yōu)化

一、性能優(yōu)化分類(lèi)

  • 布局優(yōu)化
  • 繪制優(yōu)化
  • 內(nèi)存泄漏優(yōu)化
  • 響應(yīng)速度優(yōu)化
  • ListView優(yōu)化
  • Bitmap優(yōu)化
  • 線(xiàn)程優(yōu)化

二、布局優(yōu)化

盡量減少布局的嵌套
解決辦法:
多嵌套的情況下可以使用RelativeLayout
布局層級(jí)相同的情況下使用LinearLayout,它比RelativeLayout更高效
使用<include>和<merge>標(biāo)簽以及<viewStub>
參考:Android布局優(yōu)化之標(biāo)簽include,viewstub,merge

三、繪制優(yōu)化

避免在onDraw中進(jìn)行大量操作
解決辦法:
避免在onDraw中創(chuàng)建新的局部對(duì)象,onDraw可能被多次調(diào)用,從而產(chǎn)生大量的臨時(shí)對(duì)象 ,導(dǎo)致占用過(guò)多的內(nèi)存,系統(tǒng)頻繁gc。
避免在onDraw中進(jìn)行耗時(shí)操作和大量循環(huán)操作
參考:Android性能優(yōu)化:那些不可忽略的繪制優(yōu)化

四、內(nèi)存泄漏優(yōu)化

內(nèi)存泄漏:內(nèi)存泄露指的是程序申請(qǐng)了內(nèi)存以后無(wú)法釋放
內(nèi)存溢出:指的是申請(qǐng)內(nèi)存,內(nèi)存不足了

1.靜態(tài)變量導(dǎo)致的內(nèi)存泄漏
2.單例模式導(dǎo)致的內(nèi)存泄漏

傳入單例模式的this使得單例模式持有Activity對(duì)象
解決辦法:
傳入不用this,而用getApplicationContext()

3.屬性動(dòng)畫(huà)導(dǎo)致的內(nèi)存泄漏

屬性動(dòng)畫(huà)有無(wú)限播放的動(dòng)畫(huà),如果沒(méi)有停止會(huì)一直播下去
解決辦法:
在onDestroy中調(diào)用cancel()方法取消播放

4.Handler導(dǎo)致的內(nèi)存泄漏問(wèn)題

Message持有Handler的引用,因?yàn)镠andler作為Activity的內(nèi)部類(lèi)會(huì)持有外部類(lèi)的引用,當(dāng)Activity finish的時(shí)候handler依舊會(huì)處理message
解決辦法:
將Handler設(shè)置為靜態(tài)的,靜態(tài)內(nèi)部類(lèi)不持有外部類(lèi)引用,并且如果要用到Activity的引用可以傳入弱引用

5.線(xiàn)程導(dǎo)致的內(nèi)存泄漏

AsyncTask或者Runnable定義為匿名內(nèi)部類(lèi),會(huì)持有外部類(lèi)的引用
解決辦法:
設(shè)置成靜態(tài)匿名內(nèi)部類(lèi),采用弱引用保存Context對(duì)象

6.資源未關(guān)閉導(dǎo)致的內(nèi)存泄漏

BroadcastReceiver,Bitmap,file,Stream,cursor等未關(guān)閉
解決辦法:
及時(shí)關(guān)閉資源,BroadcastReceiver用unregisterReceiver,file、cursor,stream用close,Bitmap用recycle關(guān)閉

五、響應(yīng)優(yōu)化

避免在主線(xiàn)程中做耗時(shí)操作

六、ListView優(yōu)化

復(fù)用ViewHolder類(lèi)

七、Bitmap優(yōu)化

先利用BitmapFactory.Options的inSampleSize屬性,根據(jù)需求對(duì)圖片進(jìn)行采樣后再加載進(jìn)來(lái)。

八、線(xiàn)程優(yōu)化

使用線(xiàn)程池

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容