使用AndroidStudio提供的Android Profiler工具和mat進(jìn)行內(nèi)存泄漏分析

廢話不多說直接說流程

  1. 給項(xiàng)目中集成LeakCanary工具進(jìn)行內(nèi)存泄漏檢測繁疤。發(fā)現(xiàn)有內(nèi)存泄漏后該工具會進(jìn)行提示

  2. 有內(nèi)存泄露后我們需要使用as的profiler工具進(jìn)行分析并獲取到.hprof文件,步驟如下

  • 直接上圖
    • 點(diǎn)擊如下按鈕打開profiler工具


      image.png
    • 打開以后如下圖,


      3571184-f5ba2fc11268fc54.png
    • 我們選擇MEMORY察蹲,進(jìn)去以后如下圖


      image.png
    • 然后我們對有內(nèi)存泄漏的頁面進(jìn)行反復(fù)操作(為了模擬泄漏場景)济锄。然后點(diǎn)擊下圖1位置的垃圾桶進(jìn)行強(qiáng)制gc,再點(diǎn)擊2的位置獲取堆棧信息

      image.png

    • 當(dāng)堆棧信息獲取完成后聊浅,會彈出如下框餐抢,我們將排序方式選為 Arrange by package(好定位我們自己的代碼),找到我們的代碼后我們真的發(fā)現(xiàn)狗超,應(yīng)該已經(jīng)被回收了的LoginActivity還占用這內(nèi)存。但是為什么沒有被銷毀朴下,還有那些對象引用著他努咐。這時我們就需要點(diǎn)擊位置為3的地方,導(dǎo)出.hprof文件進(jìn)行具體分析了

      image.png

    • 導(dǎo)出以后我們會得到1.hprof文件殴胧,但是這個不是mat工具用到的標(biāo)準(zhǔn)文件渗稍。我們需要使用sdk自帶的hprof-conv.exe(platform-tools文件夾下) 工具進(jìn)行轉(zhuǎn)換,轉(zhuǎn)換以后我們就得到了1_mat.hprof文件

轉(zhuǎn)換mat標(biāo)準(zhǔn)文件
命令:hprof-conv -z src dst
例如:hprof-conv -z 1.hprof 1_mat.hprof
image.png
  • 進(jìn)入Histogram 頁面有我們在紅框位置輸入我們想要找的類竿屹,然后右鍵選擇merge shortest paths to Gc roots然后在選擇exclude all phantom/weak/soft etc.references選項(xiàng)

    image.png

  • 就得到了如下的引用圖,從圖中我們分析出 loginActivity是被inputMethodManager所引用(這其實(shí)是android系統(tǒng)的一個bug),所以我們主要將兩者之間的聯(lián)系給斷開就行灸姊,解決方法如下


    image.png
  • 使用反射的方式將引用的view置為null

        InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        try {
            //獲得 所有屬性  getField->public  以及父類
            Field mCurRootViewField = InputMethodManager.class.getDeclaredField("mCurRootView");
            //設(shè)置允許訪問權(quán)限
            mCurRootViewField.setAccessible(true);
            // 對象
            Object mCurRootView = mCurRootViewField.get(im);
            if (null != mCurRootView){
                Context context = ((View) mCurRootView).getContext();
                if (context == this){
                    //破怪gc 引用鏈
                    mCurRootViewField.set(im,null);
            }
            }
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
最后編輯于
?著作權(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)容