Android線程泄漏場(chǎng)景以及解決辦法

1.非靜態(tài)內(nèi)部類的靜態(tài)實(shí)例

非靜態(tài)內(nèi)部類會(huì)持有外部類的引用丰涉,如果非靜態(tài)內(nèi)部類的實(shí)例是靜態(tài)的褂乍,就會(huì)長(zhǎng)期的維持著外部類的引用帖渠,組織被系統(tǒng)回收,解決辦法是使用靜態(tài)內(nèi)部類

2.多線程相關(guān)的匿名內(nèi)部類和非靜態(tài)內(nèi)部類

匿名內(nèi)部類同樣會(huì)持有外部類的引用倔叼,如果在線程中執(zhí)行耗時(shí)操作就有可能發(fā)生內(nèi)存泄漏汗唱,導(dǎo)致外部類無法被回收,直到耗時(shí)任務(wù)結(jié)束丈攒,解決辦法是在頁面退出時(shí)結(jié)束線程中的任務(wù)

3.Handler內(nèi)存泄漏

Handler導(dǎo)致的內(nèi)存泄漏也可以被歸納為非靜態(tài)內(nèi)部類導(dǎo)致的哩罪,Handler內(nèi)部message是被存儲(chǔ)在MessageQueue中的,有些message不能馬上被處理巡验,存在的時(shí)間會(huì)很長(zhǎng)际插,導(dǎo)致handler無法被回收,如果handler是非靜態(tài)的显设,就會(huì)導(dǎo)致它的外部類無法被回收框弛,解決辦法是1.使用靜態(tài)handler,外部類引用使用弱引用處理2.在退出頁面時(shí)移除消息隊(duì)列中的消息

4.Context導(dǎo)致內(nèi)存泄漏

根據(jù)場(chǎng)景確定使用Activity的Context還是Application的Context,因?yàn)槎呱芷诓煌段妫瑢?duì)于不必須使用Activity的Context的場(chǎng)景(Dialog),一律采用Application的Context,單例模式是最常見的發(fā)生此泄漏的場(chǎng)景瑟枫,比如傳入一個(gè)Activity的Context被靜態(tài)類引用,導(dǎo)致無法回收

5.靜態(tài)View導(dǎo)致泄漏

使用靜態(tài)View可以避免每次啟動(dòng)Activity都去讀取并渲染View指攒,但是靜態(tài)View會(huì)持有Activity的引用慷妙,導(dǎo)致無法回收,解決辦法是在Activity銷毀的時(shí)候?qū)㈧o態(tài)View設(shè)置為null(View一旦被加載到界面中將會(huì)持有一個(gè)Context對(duì)象的引用允悦,在這個(gè)例子中膝擂,這個(gè)context對(duì)象是我們的Activity,聲明一個(gè)靜態(tài)變量引用這個(gè)View,也就引用了activity)

6.WebView導(dǎo)致的內(nèi)存泄漏

WebView只要使用一次架馋,內(nèi)存就不會(huì)被釋放狞山,所以WebView都存在內(nèi)存泄漏的問題,通常的解決辦法是為WebView單開一個(gè)進(jìn)程叉寂,使用AIDL進(jìn)行通信铣墨,根據(jù)業(yè)務(wù)需求在合適的時(shí)機(jī)釋放掉

7.資源對(duì)象未關(guān)閉導(dǎo)致

如Cursor,F(xiàn)ile办绝,Broadcast等,內(nèi)部往往都使用了緩沖姚淆,會(huì)造成內(nèi)存泄漏孕蝉,一定要確保關(guān)閉它并將引用置為null

8.集合中的對(duì)象未清理

集合用于保存對(duì)象,如果集合越來越大腌逢,不進(jìn)行合理的清理降淮,尤其是入股集合是靜態(tài)的

9.Bitmap導(dǎo)致內(nèi)存泄漏

bitmap是比較占內(nèi)存的,所以一定要在不使用的時(shí)候及時(shí)進(jìn)行清理搏讶,避免靜態(tài)變量持有大的bitmap對(duì)象

10.監(jiān)聽器未關(guān)閉

很多需要register和unregister的系統(tǒng)服務(wù)要在合適的時(shí)候進(jìn)行unregister,手動(dòng)添加的listener也需要及時(shí)移除

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末佳鳖,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子媒惕,更是在濱河造成了極大的恐慌系吩,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妒蔚,死亡現(xiàn)場(chǎng)離奇詭異穿挨,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)肴盏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門科盛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人菜皂,你說我怎么就攤上這事贞绵。” “怎么了恍飘?”我有些...
    開封第一講書人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵榨崩,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我常侣,道長(zhǎng)蜡饵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任胳施,我火速辦了婚禮溯祸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己焦辅,他們只是感情好博杖,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著筷登,像睡著了一般剃根。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上前方,一...
    開封第一講書人閱讀 50,096評(píng)論 1 291
  • 那天狈醉,我揣著相機(jī)與錄音,去河邊找鬼惠险。 笑死苗傅,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的班巩。 我是一名探鬼主播渣慕,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼抱慌!你這毒婦竟也來了逊桦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤抑进,失蹤者是張志新(化名)和其女友劉穎强经,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體单匣,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡夕凝,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了户秤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片码秉。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖鸡号,靈堂內(nèi)的尸體忽然破棺而出转砖,到底是詐尸還是另有隱情,我是刑警寧澤鲸伴,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布府蔗,位于F島的核電站,受9級(jí)特大地震影響汞窗,放射性物質(zhì)發(fā)生泄漏姓赤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一仲吏、第九天 我趴在偏房一處隱蔽的房頂上張望不铆。 院中可真熱鬧蝌焚,春花似錦、人聲如沸誓斥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽劳坑。三九已至毕谴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間距芬,已是汗流浹背涝开。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留框仔,地道東北人忠寻。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像存和,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子衷旅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

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

  • Android 內(nèi)存泄漏總結(jié) 內(nèi)存管理的目的就是讓我們?cè)陂_發(fā)中怎么有效的避免我們的應(yīng)用出現(xiàn)內(nèi)存泄漏的問題捐腿。內(nèi)存泄漏...
    _痞子閱讀 1,627評(píng)論 0 8
  • 內(nèi)存管理的目的就是讓我們?cè)陂_發(fā)中怎么有效的避免我們的應(yīng)用出現(xiàn)內(nèi)存泄漏的問題。內(nèi)存泄漏大家都不陌生了柿顶,簡(jiǎn)單粗俗的講茄袖,...
    宇宙只有巴掌大閱讀 2,361評(píng)論 0 12
  • Android 內(nèi)存泄漏總結(jié) 內(nèi)存管理的目的就是讓我們?cè)陂_發(fā)中怎么有效的避免我們的應(yīng)用出現(xiàn)內(nèi)存泄漏的問題。內(nèi)存泄漏...
    apkcore閱讀 1,219評(píng)論 2 7
  • 什么是內(nèi)存泄漏嘁锯? 答:在Android程序開發(fā)中宪祥,當(dāng)一個(gè)對(duì)象已經(jīng)不需要再使用了,本該被回收時(shí)家乘,而另外一個(gè)正在使用的...
    Wow_5983閱讀 198評(píng)論 0 0
  • 內(nèi)存管理的目的就是讓我們?cè)陂_發(fā)中怎么有效的避免我們的應(yīng)用出現(xiàn)內(nèi)存泄漏的問題蝗羊。內(nèi)存泄漏大家都不陌生了,簡(jiǎn)單粗俗的講仁锯,...
    DreamFish閱讀 791評(píng)論 0 5