使用MAT来理解Android内存泄漏

时间:2014-03-25 11:31:14

标签: android memory-leaks

我正在编写我的第一个应用程序并试图了解如何使用MAT来查找潜在的内存泄漏。为简单起见,我编译了在Android Studio中启动新项目时提供的默认 Hello World 应用程序,即

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

}

美好而简单。现在,在我的平板电脑上启动此应用程序后,立即使用DDMS和hprof-conv转换工具进行堆转储( heap-conv-1.hprof )。然后我将平板电脑旋转20次,以便活动经历多个生命周期,然后我再进行一次堆转储( heap-conv-2.hprof )。

我将两个堆转储文件加载到MAT中,比较它们并为.*MainActivity.*执行正则表达式。结果是:

MainActivity objects shown in MAT

现在旋转后有MainActivity的7个实例。由于我没有对这个应用程序做任何事情,我是否正确地认为这纯粹是因为那些实例还没有GC?在这种情况下,我是否正确地认为Android在方向更改后不会使用GC,并且仅在需要更多内存时?

1 个答案:

答案 0 :(得分:1)

对于你的代码来说,它没有占用太多内存并且不会导致泄漏.. Application在你将大量bitmaps加载到内存或持有大量内存时需要大量内存of objects.and将Activity上下文用于长寿命对象..

以下是谷歌开发者关于内存泄漏的优秀视频。Memory leaks

看完之后你就会知道所有的事情。