Android Studio 3.0上分析内存泄漏

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个实例,由此可见,内存已经发生了泄漏

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容