https://developer.android.google.cn/studio/profile/android-profiler
一、通过adb命令
首先我们用电脑连接设备,用cmd执行adb的内存检测的命令:
adb shell dumpsys meminfo com.yz.multiprocess(com.yz.multiprocess是包名,要改成自己的)
执行后会显示如下信息:
二、通过Android Studio分析泄漏内存
2.1 我们先写个会发生内存泄漏的程序分析一下:
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......");
}
}
很简单,New一个Thread匿名内部类,子线程里面执行while(true),Activity将一直被引用,所以在内存回收的时候,该Activity不会被回收,由此引发内存泄漏。
2.2下面反复打开关闭Activity页面多次,然后手动GC(点击左上角的垃圾桶图标),发现内存占用并没有减少:
2.3分析一下当前的内存堆栈情况(点击垃圾桶图标右侧的图标):
选择按包名查找,找到当前测试的Activity,发现存在9个实例,由此可见,内存已经发生了泄漏