内存分析工具mat的实践

2017-01-01 22:57

前篇文章是转载网上的内存分析工具mat的使用,这篇是实战,有些细节不一样

代码准备

  • 主要的android代码入口MainActivity ,跳转到sencond
package com.example.com.oom;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
    Button btn1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn1 = (Button) findViewById(R.id.btn1);
        btn1.setOnClickListener(newOnClickListener);   

    }
    private OnClickListener newOnClickListener = new OnClickListener(){
        @Override
        public void onClick(View v) {
             Intent intent = new Intent(); 
            intent.setClass(MainActivity.this, sencond.class);
             MainActivity.this.startActivity(intent);
        }
    };
  • sencond.class
package com.example.com.oom;

import android.app.Activity;
import android.os.Bundle;

public class sencond extends Activity {
    private static deak mLeak;
    private static teak tLeak;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
          mLeak = new deak();
          tLeak = new teak();

        }
    class deak {
    }
    class teak {
    }
}
  • 注意 要到manifest.xml中的application目录下加入
<activity android:name="sencond"></activity> 

执行操作

手动多次点击首页的跳转(切换到了sencond),然后按返回键

  • 点击ddms,点击dump hpero file--默认选项点击完成

Paste_Image.png

  • 点击histogram

Paste_Image.png

  • 搜索包名

Paste_Image.png

  • 后面的$deak,teak就是内存泄露的类,意思就是在activicity下的sencond中的deak,teak有内存泄露

注意

快速找出某个实例没被释放的原因,可以右健 Path to GC Roots-->exclue all phantom/weak/soft etc. reference

这个我试过了,并没有数据