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

分析工具:
1MAT
2Android Studio Memory-profiler
https://developer.android.com/studio/profile/memory-profiler#performance
3LeakCanary
https://github.com/square/leakcanary

Android內(nèi)存泄漏常見場景以及解決方案:
1、資源性對象未關(guān)閉
對于資源性對象不再使用時,應(yīng)該立即調(diào)用它的close()函數(shù),將其關(guān)閉胁黑,然后再置為null。例如Bitmap
等資源未關(guān)閉會造成內(nèi)存泄漏唇跨,此時我們應(yīng)該在Activity銷毀時及時關(guān)閉脏款。
2钮科、注冊對象未注銷
例如BraodcastReceiver、EventBus未注銷造成的內(nèi)存泄漏奄喂,我們應(yīng)該在Activity銷毀時及時注銷之剧。
3、類的靜態(tài)變量持有大數(shù)據(jù)對象
盡量避免使用靜態(tài)變量存儲數(shù)據(jù)砍聊,特別是大數(shù)據(jù)對象,建議使用數(shù)據(jù)庫存儲贰军。
4玻蝌、單例造成的內(nèi)存泄漏
優(yōu)先使用Application的Context,如需使用Activity的Context词疼,可以在傳入Context時使用弱引用進(jìn)行封
裝俯树,然后,在使用到的地方從弱引用中獲取Context贰盗,如果獲取不到许饿,則直接return。
5舵盈、非靜態(tài)內(nèi)部類的靜態(tài)實例
該實例的生命周期和應(yīng)用一樣長陋率,這就導(dǎo)致該靜態(tài)實例一直持有該Activity的引用,Activity的內(nèi)存資源
不能正郴嗤恚回收瓦糟。此時,我們可以將該內(nèi)部類設(shè)為靜態(tài)內(nèi)部類或?qū)⒃搩?nèi)部類抽取出來封裝成一個單例赴蝇,如
果需要使用Context菩浙,盡量使用Application Context,如果需要使用Activity Context句伶,就記得用完后置
空讓GC可以回收劲蜻,否則還是會內(nèi)存泄漏。
6考余、Handler臨時性內(nèi)存泄漏
Message發(fā)出之后存儲在MessageQueue中先嬉,在Message中存在一個target,它是Handler的一個引
用秃殉,Message在Queue中存在的時間過長坝初,就會導(dǎo)致Handler無法被回收。如果Handler是非靜態(tài)的钾军,
則會導(dǎo)致Activity或者Service不會被回收鳄袍。并且消息隊列是在一個Looper線程中不斷地輪詢處理消息,
當(dāng)這個Activity退出時吏恭,消息隊列中還有未處理的消息或者正在處理的消息拗小,并且消息隊列中的Message
持有Handler實例的引用,Handler又持有Activity的引用樱哼,所以導(dǎo)致該Activity的內(nèi)存資源無法及時回
收哀九,引發(fā)內(nèi)存泄漏剿配。解決方案如下所示:
1、使用一個靜態(tài)Handler內(nèi)部類阅束,然后對Handler持有的對象(一般是Activity)使用弱引用呼胚,這
樣在回收時,也可以回收Handler持有的對象息裸。
2蝇更、在Activity的Destroy或者Stop時,應(yīng)該移除消息隊列中的消息呼盆,避免Looper線程的消息隊列中
有待處理的消息需要處理年扩。
需要注意的是,AsyncTask內(nèi)部也是Handler機(jī)制访圃,同樣存在內(nèi)存泄漏風(fēng)險厨幻,但其一般是臨時性的。對于
類似AsyncTask或是線程造成的內(nèi)存泄漏腿时,我們也可以將AsyncTask和Runnable類獨立出來或者使用靜
態(tài)內(nèi)部類况脆。
7、容器中的對象沒清理造成的內(nèi)存泄漏
在退出程序之前圈匆,將集合里的東西clear漠另,然后置為null,再退出程序
8跃赚、WebView
WebView都存在內(nèi)存泄漏的問題笆搓,在應(yīng)用中只要使用一次WebView,內(nèi)存就不會被釋放掉纬傲。我們可以為
WebView開啟一個獨立的進(jìn)程满败,使用AIDL與應(yīng)用的主進(jìn)程進(jìn)行通信,WebView所在的進(jìn)程可以根據(jù)業(yè)
務(wù)的需要選擇合適的時機(jī)進(jìn)行銷毀叹括,達(dá)到正常釋放內(nèi)存的目的算墨。
9、使用ListView時造成的內(nèi)存泄漏
在構(gòu)造Adapter時汁雷,使用緩存的convertView净嘀。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者侠讯。
  • 序言:七十年代末挖藏,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子厢漩,更是在濱河造成了極大的恐慌膜眠,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異宵膨,居然都是意外死亡架谎,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進(jìn)店門辟躏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谷扣,“玉大人,你說我怎么就攤上這事捎琐∫种樱” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵野哭,是天一觀的道長。 經(jīng)常有香客問我幻件,道長拨黔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任绰沥,我火速辦了婚禮篱蝇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘徽曲。我一直安慰自己零截,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布秃臣。 她就那樣靜靜地躺著涧衙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪奥此。 梳的紋絲不亂的頭發(fā)上弧哎,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天,我揣著相機(jī)與錄音稚虎,去河邊找鬼撤嫩。 笑死,一個胖子當(dāng)著我的面吹牛蠢终,可吹牛的內(nèi)容都是我干的序攘。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼寻拂,長吁一口氣:“原來是場噩夢啊……” “哼程奠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起兜喻,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤梦染,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體帕识,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡泛粹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了肮疗。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片晶姊。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖伪货,靈堂內(nèi)的尸體忽然破棺而出们衙,到底是詐尸還是另有隱情,我是刑警寧澤碱呼,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布蒙挑,位于F島的核電站,受9級特大地震影響愚臀,放射性物質(zhì)發(fā)生泄漏忆蚀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一姑裂、第九天 我趴在偏房一處隱蔽的房頂上張望馋袜。 院中可真熱鬧,春花似錦舶斧、人聲如沸欣鳖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泽台。三九已至,卻和暖如春矾缓,著一層夾襖步出監(jiān)牢的瞬間师痕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工而账, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留胰坟,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓泞辐,卻偏偏與公主長得像笔横,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子咐吼,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,514評論 2 348