Android内存优化2-内存分析工具的使用

ok、写一段内存泄漏的code

    private TextView txt;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_memory_analyze);
        txt = (TextView) findViewById(R.id.txt);
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                txt.setText("Done");
            }
        }, 800000L);
    }

注意这个匿名的Runnable被送到了Handler中,而且延迟非常的长。现在我们运行这个Activity,反复旋转屏幕。
为什么会内存泄漏、阅读过上篇文章(Android AndroidStudio MAT LeakCanary 内存分析之 初识内存泄漏)的道友已经明白了。在翻转屏幕的时候Activity 就 Destroy了、但是runnable中的TextView还持有着Activity的引用,那么导致Activity不能被GC、导致内存泄漏

先用Memory Monitor(3.0以上为Android Profiler)
来回横竖屏动作,然后点击GC按钮


Android内存优化2-内存分析工具的使用_第1张图片
image.png

可以看到Activity有8个实例


Android内存优化2-内存分析工具的使用_第2张图片
image.png

点击jump to source,就可以看到对应的泄漏代码了。

如果想用其他工具分析Hprof,那么需要先将hprof文件导出,然后在将其转换为javase的hprof文件。


image.png

个人经验可以先用studio分析出可疑的泄漏位置,如果还不能发现就放到mat里进一步分析


Android内存优化2-内存分析工具的使用_第3张图片
image.png

剩下的就是根据代码的了解程度和详细的对比给出结论了,注意,慢工出细活,急不来。

你可能感兴趣的:(Android内存优化2-内存分析工具的使用)