Android Studio 3.0上分析內(nèi)存泄漏

https://developer.android.google.cn/studio/profile/android-profiler

一、通過(guò)adb命令

首先我們用電腦連接設(shè)備,用cmd執(zhí)行adb的內(nèi)存檢測(cè)的命令:
adb shell dumpsys meminfo com.yz.multiprocess(com.yz.multiprocess是包名,要改成自己的)

執(zhí)行后會(huì)顯示如下信息:


二、通過(guò)Android Studio分析泄漏內(nèi)存

2.1 我們先寫個(gè)會(huì)發(fā)生內(nèi)存泄漏的程序分析一下:


public class SecondActivity extends Activity {
    private static final String TAG = "SecendActivity";
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
    
    }

    @Override
    protected void onResume() {
        super.onResume();
        new Thread(new Runnable() {
            @Override
            public void run() {
                while (true){
                   int i=0;
                   i++;
                }
            }
        }).start();
        Log.i(TAG,"onResume......");
    }
}

很簡(jiǎn)單,New一個(gè)Thread匿名內(nèi)部類,子線程里面執(zhí)行while(true),Activity將一直被引用,所以在內(nèi)存回收的時(shí)候,該Activity不會(huì)被回收,由此引發(fā)內(nèi)存泄漏。

2.2下面反復(fù)打開關(guān)閉Activity頁(yè)面多次,然后手動(dòng)GC(點(diǎn)擊左上角的垃圾桶圖標(biāo)),發(fā)現(xiàn)內(nèi)存占用并沒(méi)有減少:

2.3分析一下當(dāng)前的內(nèi)存堆棧情況(點(diǎn)擊垃圾桶圖標(biāo)右側(cè)的圖標(biāo)):
選擇按包名查找,找到當(dāng)前測(cè)試的Activity,發(fā)現(xiàn)存在9個(gè)實(shí)例,由此可見,內(nèi)存已經(jīng)發(fā)生了泄漏

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容