內(nèi)存泄漏排查及編碼建議

原則:不要讓長生命周期變量持有待回收對(duì)象的引用

1践美、盡量使用Application的Context 而不是Activity的Context

比如Toast疫衩。Activity包含很多視圖返奉,視圖含有圖片文字等資源,很容易能出現(xiàn)內(nèi)存泄露占用大量內(nèi)存诀蓉。

2浸遗、不要用static變量直接或間接持久引用大對(duì)象 Context、Activity驾胆、View涣澡、Dialog、Drawable等丧诺。

Static變量是類變量入桂,不會(huì)隨著對(duì)象的銷毀而銷毀,一旦持有對(duì)象驳阎,會(huì)一直在內(nèi)存中不能釋放抗愁。
View、Dialog呵晚、Drawable 等會(huì)直接或間接持有Context蜘腌、Activity的引用。Drawable綁定到View后會(huì)持有View的引用饵隙,進(jìn)而持有Activity的引用撮珠。(4.0之后的版本Drawable引用問題修復(fù))

3、盡量使用WeakReference 持有Context等引用金矛。

具體參見弱引用使用方法

4芯急、盡量不要在Activity中使用非靜態(tài)內(nèi)部類 (容易忽視)

非靜態(tài)內(nèi)部類會(huì)持有外部類的引用。Handler驶俊、AsyncTask 以非靜態(tài)內(nèi)部類的方式實(shí)現(xiàn)容易內(nèi)存泄露娶耍,所以盡量以單獨(dú)的類文件或者靜態(tài)內(nèi)部類的形式實(shí)現(xiàn),同時(shí)WeakReference 引用Activity废睦。

     public class MainActivity extends Activity {
        private static Handler mHandler = new Handler(){
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
            }
        };
    }

mHandler 用static關(guān)鍵字 (原則2) 非靜態(tài)匿名內(nèi)部類的形式實(shí)現(xiàn)伺绽,將會(huì)永久持有當(dāng)前MainActivity實(shí)例。附Handler正確使用方式:

    public class MainActivity extends Activity {
        private static class MyHandler extends Handler {
            private WeakReference<Context> reference;
            public MyHandler(Context context) {
                reference = new WeakReference<Context>(context);
            }
            @Override
            public void handleMessage(Message msg) {
                Context context = reference.get();
            }
        }
        private Handler mHandler = new MyHandler(this);
        @Override
        protected void onDestroy() {
            super.onDestroy();
            mHandler.removeCallbacksAndMessages(null);
        }
    }

5嗜湃、占用資源的在使用完后應(yīng)關(guān)閉

File奈应,Cursor,Stream等等使用完應(yīng)關(guān)閉

6购披、不要濫用static變量杖挣、單例

static變量的濫用在小微中尤甚。各種大型全局static List 從來不清空釋放刚陡。U.java中的列表將會(huì)一直占用內(nèi)存

7惩妇、各種注冊(cè)有對(duì)應(yīng)的反注冊(cè) (容易忽視)

  • EventBus的 register 和 unregister
  • BraodcastReceiver的 registerReceiver 和 unregisterReceiver

8株汉、Bitmap使用后應(yīng)調(diào)用recycle(android3.0之后已經(jīng)解決)

9、 ListView優(yōu)化使用convertView 和 ViewHolder

10歌殃、WebView坑很多

WebView還不完善加載大量視圖時(shí)很容易內(nèi)存泄露乔妈,且在不同版本不同機(jī)型上表現(xiàn)都不一致。目前比較好的做法是加載WebView的界面開啟新進(jìn)程氓皱,在該頁面退出之后關(guān)閉這個(gè)進(jìn)程路召。使用System.exit(0)直接退出虛擬機(jī)。這樣做需要解決新進(jìn)程啟動(dòng)慢波材、進(jìn)程間同步等問題股淡。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市廷区,隨后出現(xiàn)的幾起案子唯灵,更是在濱河造成了極大的恐慌,老刑警劉巖隙轻,帶你破解...
    沈念sama閱讀 222,464評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件埠帕,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡大脉,警方通過查閱死者的電腦和手機(jī)搞监,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來镰矿,“玉大人琐驴,你說我怎么就攤上這事〕颖辏” “怎么了绝淡?”我有些...
    開封第一講書人閱讀 169,078評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵苍姜,是天一觀的道長。 經(jīng)常有香客問我衙猪,道長馍乙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,979評(píng)論 1 299
  • 正文 為了忘掉前任丝格,我火速辦了婚禮,結(jié)果婚禮上棵譬,老公的妹妹穿的比我還像新娘。我一直安慰自己订咸,他們只是感情好曼尊,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著骆撇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪艾船。 梳的紋絲不亂的頭發(fā)上葵腹,一...
    開封第一講書人閱讀 52,584評(píng)論 1 312
  • 那天屿岂,我揣著相機(jī)與錄音,去河邊找鬼鲸匿。 笑死爷怀,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的带欢。 我是一名探鬼主播运授,決...
    沈念sama閱讀 41,085評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼乔煞!你這毒婦竟也來了吁朦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,023評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤渡贾,失蹤者是張志新(化名)和其女友劉穎逗宜,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體空骚,經(jīng)...
    沈念sama閱讀 46,555評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡纺讲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了囤屹。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片熬甚。...
    茶點(diǎn)故事閱讀 40,769評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖肋坚,靈堂內(nèi)的尸體忽然破棺而出乡括,到底是詐尸還是另有隱情,我是刑警寧澤智厌,帶...
    沈念sama閱讀 36,439評(píng)論 5 351
  • 正文 年R本政府宣布诲泌,位于F島的核電站,受9級(jí)特大地震影響峦剔,放射性物質(zhì)發(fā)生泄漏档礁。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評(píng)論 3 335
  • 文/蒙蒙 一吝沫、第九天 我趴在偏房一處隱蔽的房頂上張望呻澜。 院中可真熱鬧递礼,春花似錦、人聲如沸羹幸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽栅受。三九已至将硝,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間屏镊,已是汗流浹背依疼。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留而芥,地道東北人律罢。 一個(gè)月前我還...
    沈念sama閱讀 49,191評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像棍丐,于是被迫代替她去往敵國和親误辑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評(píng)論 2 361

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,318評(píng)論 25 707
  • 面試必背 會(huì)舍棄歌逢、總結(jié)概括——根據(jù)我這些年面試和看面試題搜集過來的知識(shí)點(diǎn)匯總而來 建議根據(jù)我的寫的面試應(yīng)對(duì)思路中的...
    luoyangzk閱讀 6,763評(píng)論 6 173
  • 內(nèi)存管理的目的就是讓我們?cè)陂_發(fā)中怎么有效的避免我們的應(yīng)用出現(xiàn)內(nèi)存泄漏的問題巾钉。內(nèi)存泄漏大家都不陌生了,簡單粗俗的講秘案,...
    宇宙只有巴掌大閱讀 2,364評(píng)論 0 12
  • 語宇媽親子日記第4天~2018/9/6 寓教于樂 1.親子共讀:《父與子》《我是數(shù)學(xué)迷》 2.親子游戲:廣場(chǎng)玩耍 ...
    唐嘉閱讀 204評(píng)論 0 1
  • 青山碧樹小樓西, 零落浮華碾作泥踏烙。 雨織清愁波浩渺, 春風(fēng)醉我苦別離讨惩。 (中華新韻)
    文山鹿閱讀 1,646評(píng)論 1 8