Android內(nèi)存泄漏


內(nèi)存泄漏原因

根據(jù)gc回收機(jī)制毛仪,已銷毀的組件或?qū)ο筮€被引用搁嗓,導(dǎo)致無(wú)法被回收,導(dǎo)致內(nèi)存泄漏箱靴,內(nèi)存占用將越來(lái)越多腺逛,而虛擬機(jī)為每個(gè)App分配內(nèi)存是有限的,最終內(nèi)存溢出衡怀。

1棍矛,Application引用Activity,Application的生命周期是整個(gè)App的周期狈癞,如果引用某一個(gè)Activity實(shí)例茄靠,將導(dǎo)致Activity組件銷毀時(shí)茂契,對(duì)象無(wú)法回收蝶桶。
2,匿名內(nèi)部類掉冶,非靜態(tài)內(nèi)部類真竖,他們會(huì)持有外部類對(duì)象的引用脐雪。在Activity中定義的,導(dǎo)致無(wú)法回收恢共。如Handler消息隊(duì)列有未處理消息但是Activity已經(jīng)銷毀战秋,導(dǎo)致泄漏,靜態(tài)或弱引用解決讨韭。還有Thread脂信,以及AsyncTask。
3透硝,static修飾的變量引用Activity狰闪,同理,static的生命周期是整個(gè)app的周期濒生。
4埋泵,單例模式,生命周期與app相同罪治,導(dǎo)致泄漏丽声。
5,資源未關(guān)閉觉义,造成的內(nèi)存泄漏雁社,如file,curse晒骇,stream歧胁,在finally中close關(guān)閉資源對(duì)象,厉碟。
6喊巍,Activity內(nèi)部創(chuàng)建一個(gè)靜態(tài)對(duì)象,構(gòu)造方法包含Context箍鼓,使用this傳入創(chuàng)建崭参。
7,WebView內(nèi)存泄漏款咖。未unregister何暮,callback。先移除view铐殃,在destory海洼。解決方案可以開(kāi)啟一個(gè)獨(dú)立進(jìn)程,aidl和主進(jìn)程通信富腊。
8坏逢,容器對(duì)象未清理,將引用從集合中清除掉。
9是整,注冊(cè)對(duì)象未注銷肖揣。如BraodcastReceiver注冊(cè)。


Handler導(dǎo)致內(nèi)存泄漏

Handler綁定主線程消息隊(duì)列和Looper浮入,同時(shí)龙优,內(nèi)部匿名Handelr定義會(huì)持有外部Activity的實(shí)例,在這種情況下事秀,如果我們通過(guò)Handler發(fā)送了一個(gè)延遲幾分鐘的消息到主線程消息隊(duì)列彤断,銷毀Activity。
因?yàn)橄⒁呀?jīng)放在主線程消息隊(duì)列易迹,消息隊(duì)列由主線程一直在處理瓦糟,肯定不會(huì)被回收,而剛才的消息被插入到隊(duì)列中赴蝇,還有一定時(shí)間才會(huì)處理菩浙,也不會(huì)被回收,同時(shí)句伶,消息中拿著該Handler的引用劲蜻,即target,這個(gè)是關(guān)鍵考余,Handler也不會(huì)被回收先嬉,導(dǎo)致Activity無(wú)法被回收。

解決方案:只要不持有Activity的強(qiáng)引用即可楚堤。
1疫蔓,靜態(tài)內(nèi)部類+弱引用。
2身冬,外部類定義Handler衅胀。
3,結(jié)束Activity時(shí)酥筝,將消息移除隊(duì)列滚躯,切斷了和消息隊(duì)列的關(guān)系,這樣msg即可以被gc嘿歌,那么handler也會(huì)掸掏。


內(nèi)存分析工具

1,直接在As查看內(nèi)存分配情況宙帝,操作應(yīng)用時(shí)丧凤,內(nèi)存一直往上漲說(shuō)明存在內(nèi)存泄露。
2步脓,內(nèi)存泄露分析工具M(jìn)AT(Memory Analyzer tool)愿待。
3浩螺,LeakCanary快速定位內(nèi)存泄露。

Android Profiler

監(jiān)控應(yīng)用內(nèi)存呼盆,cpu和網(wǎng)絡(luò)的圖形化工具,可以顯示可用/已用內(nèi)存蚁廓。
內(nèi)存監(jiān)控Memory Profiler整合了Heap Viewer访圃,Allocation Tracker和Memory Monitor的特性,可以觀察對(duì)象分配實(shí)時(shí)數(shù)量相嵌,觀察一段時(shí)間內(nèi)的垃圾收集事件腿时,F(xiàn)orce GC,Dump Java heap饭宾。

Heap Viewer

5.0及以上的系統(tǒng)批糟,查看所有內(nèi)存情況,手動(dòng)GC看铆。
Heap Size徽鼎,堆棧分配App的內(nèi)存大小,Allocated弹惦,使用大小否淤,F(xiàn)ree,空閑大小棠隐,Used石抡,使用率,Object助泽,對(duì)象數(shù)量啰扛。
展現(xiàn)所有數(shù)據(jù)類型的內(nèi)存情況。

Allocation Tracker

分配跟蹤記錄App的內(nèi)存分配嗡贺,列出調(diào)用堆棧隐解,查看所有對(duì)象內(nèi)存分配周期。
啟動(dòng)Allocation Tracking诫睬,操作App厢漩,結(jié)束追蹤。生成alloc文件岩臣,記錄此次追蹤到的所有內(nèi)存數(shù)據(jù)溜嗜。Android Stuido可打開(kāi)此文件查看。


任重而道遠(yuǎn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末架谎,一起剝皮案震驚了整個(gè)濱河市炸宵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谷扣,老刑警劉巖土全,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件捎琐,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡裹匙,警方通過(guò)查閱死者的電腦和手機(jī)瑞凑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)概页,“玉大人籽御,你說(shuō)我怎么就攤上這事《璩祝” “怎么了技掏?”我有些...
    開(kāi)封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)项鬼。 經(jīng)常有香客問(wèn)我哑梳,道長(zhǎng),這世上最難降的妖魔是什么绘盟? 我笑而不...
    開(kāi)封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任鸠真,我火速辦了婚禮,結(jié)果婚禮上龄毡,老公的妹妹穿的比我還像新娘弧哎。我一直安慰自己,他們只是感情好稚虎,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布撤嫩。 她就那樣靜靜地躺著,像睡著了一般蠢终。 火紅的嫁衣襯著肌膚如雪序攘。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天寻拂,我揣著相機(jī)與錄音程奠,去河邊找鬼。 笑死祭钉,一個(gè)胖子當(dāng)著我的面吹牛瞄沙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播慌核,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼距境,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了垮卓?” 一聲冷哼從身側(cè)響起垫桂,我...
    開(kāi)封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎粟按,沒(méi)想到半個(gè)月后诬滩,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體霹粥,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年疼鸟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了后控。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡空镜,死狀恐怖浩淘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情姑裂,我是刑警寧澤馋袜,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布男旗,位于F島的核電站舶斧,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏察皇。R本人自食惡果不足惜茴厉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望什荣。 院中可真熱鬧矾缓,春花似錦、人聲如沸稻爬。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)桅锄。三九已至琉雳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間友瘤,已是汗流浹背翠肘。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辫秧,地道東北人束倍。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像盟戏,于是被迫代替她去往敵國(guó)和親绪妹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

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