Android內(nèi)存泄漏分析心得

http://www.maiziedu.com/article/9126/

Android中分析內(nèi)存泄漏的工具M(jìn)AT

MAT(Memory Analyzer Tools)是一個 Eclipse 插件溪掀,它是一個快速缸废、功能豐富的JAVA heap分析工具滑绒,它可以幫助我們查找內(nèi)存泄漏和減少內(nèi)存消耗。

常見的內(nèi)存泄漏案例

case 1.單例造成的內(nèi)存泄漏跃闹,單例的靜態(tài)特性導(dǎo)致其生命周期同應(yīng)用一樣長凶杖。

解決方案:

1.將該屬性的引用方式改為弱引用

2.如果傳入context草丧,使用ApplicationContext

case 2.InnerClass匿名內(nèi)部類

在Java中盆耽,非靜態(tài)內(nèi)部類 和 匿名類 都會潛在的引用它們所屬的外部類腋寨,但是聪铺,靜態(tài)內(nèi)部類卻不會。如果這個非靜態(tài)內(nèi)部類實(shí)例做了一些耗時的操作萄窜,就會造成外圍對象不會被回收铃剔,從而導(dǎo)致內(nèi)存泄漏。

解決方案:

1.將內(nèi)部類變成靜態(tài)內(nèi)部類

2.如果有強(qiáng)引用Activity中的屬性查刻,則將該屬性的引用方式改為弱引用

case 3. Activity Context 的不正確使用

在Android應(yīng)用程序中通臣担可以使用兩種Context對象:Activity和Application。當(dāng)類或方法需要Context對象的時候常見的做法是使用第一個作為Context參數(shù)穗泵。這樣就意味著View對象對整個Activity保持引用普气,因此也就保持對Activty的所有的引用。

假設(shè)一個場景佃延,當(dāng)應(yīng)用程序有個比較大的Bitmap類型的圖片现诀,每次旋轉(zhuǎn)是都重新加載圖片所用的時間較多。為了提高屏幕旋轉(zhuǎn)是Activity的創(chuàng)建速度苇侵,最簡單的方法時將這個Bitmap對象使用Static修飾赶盔。 當(dāng)一個Drawable綁定在View上,實(shí)際上這個View對象就會成為這份Drawable的一個Callback成員變量榆浓。而靜態(tài)變量的生命周期要長于Activity于未。導(dǎo)致了當(dāng)旋轉(zhuǎn)屏幕時,Activity無法被回收陡鹃,而造成內(nèi)存泄露烘浦。

解決方案:

1.使用ApplicationContext代替ActivityContext,因?yàn)锳pplicationContext會隨著應(yīng)用程序的存在而存在萍鲸,而不依賴activity的生命周期

2.對context的引用不要超過它本身的生命周期

case 4. Handler引起的內(nèi)存泄漏

當(dāng)Handler中有延遲的的任務(wù)或是等待執(zhí)行的任務(wù)隊(duì)列過長闷叉,由于消息持有對Handler的引用,而Handler又持有對其外部類的潛在引用脊阴,這條引用關(guān)系會一直保持到消息得到處理握侧,而導(dǎo)致了Activity無法被垃圾回收器回收蚯瞧,而導(dǎo)致了內(nèi)存泄露。

解決方案:

1.可以把Handler類放在單獨(dú)的類文件中品擎,或者使用靜態(tài)內(nèi)部類便可以避免泄露;

2.如果想在Handler內(nèi)部去調(diào)用所在的Activity,那么可以在handler內(nèi)部使用弱引用的方式去指向所在Activity.使用Static + WeakReference的方式來達(dá)到斷開Handler與Activity之間存在引用關(guān)系的目的埋合。

case5. 未及時關(guān)閉比較耗資源的對象。比如database conn萄传,serivce甚颂。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市秀菱,隨后出現(xiàn)的幾起案子振诬,更是在濱河造成了極大的恐慌,老刑警劉巖衍菱,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赶么,死亡現(xiàn)場離奇詭異,居然都是意外死亡脊串,警方通過查閱死者的電腦和手機(jī)禽绪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來洪规,“玉大人,你說我怎么就攤上這事循捺≌独” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵从橘,是天一觀的道長念赶。 經(jīng)常有香客問我,道長恰力,這世上最難降的妖魔是什么叉谜? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮踩萎,結(jié)果婚禮上停局,老公的妹妹穿的比我還像新娘。我一直安慰自己香府,他們只是感情好董栽,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著企孩,像睡著了一般锭碳。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上勿璃,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天擒抛,我揣著相機(jī)與錄音推汽,去河邊找鬼。 笑死歧沪,一個胖子當(dāng)著我的面吹牛歹撒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播槽畔,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼栈妆,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了厢钧?” 一聲冷哼從身側(cè)響起鳞尔,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎早直,沒想到半個月后寥假,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡霞扬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年糕韧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喻圃。...
    茶點(diǎn)故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡萤彩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出斧拍,到底是詐尸還是另有隱情雀扶,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布肆汹,位于F島的核電站愚墓,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏昂勉。R本人自食惡果不足惜浪册,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望岗照。 院中可真熱鬧村象,春花似錦、人聲如沸谴返。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嗓袱。三九已至籍救,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間渠抹,已是汗流浹背蝙昙。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工闪萄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人奇颠。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓败去,卻偏偏與公主長得像,于是被迫代替她去往敵國和親烈拒。 傳聞我的和親對象是個殘疾皇子圆裕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容