常見的內存泄漏

handler耗時引發(fā)的內存泄漏

當activity當中存在handler接收耗時的消息時糕档,比如我們一般在網(wǎng)絡請求切換線程時,經(jīng)常使用到handler拌喉,假設消息還沒有發(fā)送完成速那,但是頁面已經(jīng)被關閉,也就說activity已經(jīng)執(zhí)行了ondestroy方法尿背。當gc回收時端仰,會出現(xiàn)改activity不能被回收的情況,導致內存泄漏田藐。

解決辦法:當activity銷毀的時候荔烧,調用handler的removeCallbacksAndMessages方法,移除消息任務汽久,然后將handler對象及線程置空鹤竭。

內部類引發(fā)的內存泄漏(當然handler或子線程一般也作為內部類使用)

因為java當中,內部類默認持有外部類的引用景醇,當外部類銷毀后臀稚,一旦gc回收該實例,發(fā)現(xiàn)內部類持有他的引用而導致不能回收該實例三痰,出現(xiàn)內存泄漏的情況吧寺。

解決方法:將內部類改為靜態(tài)內部類窜管,因為靜態(tài)內部類生命周期和應用一樣長,所以當退出程序的時候會一同回收該實例稚机,并不會影響外部類的回收微峰。

單例導致的內存泄漏

因為在使用單例的時候,經(jīng)常會傳入一個本類的上下文對象抒钱,而單例是靜態(tài)的蜓肆,生命周期和application一樣長,當activity銷毀的時候谋币,該單例持有activity的引用導致其不能被回收仗扬,出現(xiàn)內存泄漏。

解決方法:在使用上下文的時候蕾额,傳全局上下文早芭。

資源未關閉

Cursor,stream诅蝶,database退个,Butterknife,broadcastreciver调炬,bindservice语盈,eventBus

比如這些東西在使用完成后,需要進行close或者Unbind處理缰泡,以節(jié)省內存

Bitmap對象不在使用時調用recycle()釋放內存

Timer計時器刀荒、動畫,因為這些涉及耗時問題棘钞,如果activity銷毀缠借,而該任務并未執(zhí)行完成,會導致內存泄漏宜猜,所以一般在activity中如果使用到這些耗時任務泼返,需要在activity銷毀時,做對應處理姨拥,比如調用timer的cancel方法绅喉,或者動畫的cancel方法并將對象置空

一些監(jiān)聽器的內存泄漏,比如說我們給edittext設置輸入文字監(jiān)聽時垫毙,當監(jiān)聽到文字發(fā)生變化霹疫,我們通過獲取變化后的文字執(zhí)行了耗時任務(比如獲取到edittext里的內容上傳服務器),當耗時任務未執(zhí)行完成activity銷毀了综芥,會引發(fā)內存泄漏,所以在onDestory時猎拨,取消注冊膀藐,比如說editText調用removeTextChangedListener方法

Rxjava的內存泄漏:因為rxjava采用的是觀察者模式屠阻,當請求到數(shù)據(jù)后會根據(jù)訂閱關系將數(shù)據(jù)發(fā)送個訂閱者,而如果這時訂閱者已經(jīng)銷毀额各,就會出現(xiàn)引用該對象導致其不能被回收的情況国觉,出現(xiàn)內存泄漏,rxjava2發(fā)布的時候也發(fā)現(xiàn)了這個問題虾啦,所以在回調當中麻诀,新增加了onSubcribe回調,同時返回了一個disposable對象傲醉,可以通過判斷disposable里的isDisposed來確定當前的訂閱關系蝇闭,如果訂閱關系中的訂閱者已經(jīng)不存在且當前訂閱關系存在,解除訂閱關系硬毕,并終止數(shù)據(jù)的發(fā)送呻引。

webView引發(fā)的內存泄漏:因為webview在使用的時候一般持有activity的引用,我們一般在activity的onDestroy方法中調用mWebView.destroy();來釋放webview吐咳。如果在onDetachedFromWindow之前調用了destroy那就肯定會無法正常反注冊了逻悠,也就會導致內存泄漏。所以在銷毀webview前一定要先在onDetachedFromWindow中將webview從它的父view中移除韭脊,再調用destroy方法中調用webview的destroy童谒,我開發(fā)的時候在5.1以上的手機上發(fā)現(xiàn)這種問題比較多,因為現(xiàn)在5.1以下適配的比較少了沪羔,基本沒咋注意惠啄。

線程導致的內存泄漏:一般使用子線程都會創(chuàng)建一個內部類對象,而創(chuàng)建線程一般執(zhí)行耗時任務任内,所以這個內部類默認持有外部類的引用撵渡,如果耗時任務在activity銷毀的時候未執(zhí)行完成,會因為持有外部類引用導致外部類不能被回收死嗦。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末趋距,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子越除,更是在濱河造成了極大的恐慌节腐,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件摘盆,死亡現(xiàn)場離奇詭異翼雀,居然都是意外死亡,警方通過查閱死者的電腦和手機孩擂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門狼渊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事狈邑〕切耄” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵米苹,是天一觀的道長糕伐。 經(jīng)常有香客問我,道長蘸嘶,這世上最難降的妖魔是什么良瞧? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮训唱,結果婚禮上褥蚯,老公的妹妹穿的比我還像新娘。我一直安慰自己雪情,他們只是感情好遵岩,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著巡通,像睡著了一般尘执。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上宴凉,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天誊锭,我揣著相機與錄音,去河邊找鬼弥锄。 笑死丧靡,一個胖子當著我的面吹牛,可吹牛的內容都是我干的籽暇。 我是一名探鬼主播温治,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼戒悠!你這毒婦竟也來了熬荆?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤绸狐,失蹤者是張志新(化名)和其女友劉穎卤恳,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寒矿,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡突琳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了符相。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拆融。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出冠息,到底是詐尸還是另有隱情挪凑,我是刑警寧澤孕索,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布逛艰,位于F島的核電站,受9級特大地震影響搞旭,放射性物質發(fā)生泄漏散怖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一肄渗、第九天 我趴在偏房一處隱蔽的房頂上張望镇眷。 院中可真熱鬧,春花似錦翎嫡、人聲如沸欠动。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽具伍。三九已至,卻和暖如春圈驼,著一層夾襖步出監(jiān)牢的瞬間人芽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工绩脆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留萤厅,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓靴迫,卻偏偏與公主長得像惕味,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子玉锌,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內容