这篇文章主要为大家介绍了Android内存泄漏的相关资料,重点介绍了内存泄漏的检查工具Heap和内存泄漏的分析工具MAT,感兴趣的小伙伴们可以参考一下
一、概述
在Android的开发中,经常听到“内存泄漏”这个词。“内存泄漏”就是一个对象已经不需要再使用了,但是因为其它的对象持有该对象的引用,导致它的内存不能被回收。“内存泄漏”的慢慢积累,最终会导致OOM的发生,千里之堤,毁于蚁穴。所以在写代码的过程中,应该要注意规避会导致“内存泄漏”的代码写法,提高软件的健壮性。
本文将从发现问题、解决问题、总结问题的三个角度出发,循序渐进,彻底解决“内存泄漏”的问题。
二、内存泄漏的检查工具Heap
工欲善其事必先利其器,要检测“内存泄漏”的发生,需要借助DDMS中的Heap工具及MAT工具,Heap工具用于大致分析是否存在“内存泄漏”,而MAT工具则用于分析“内存泄漏”发生在哪里。
Heap工具的使用介绍
具体操作
- 1.在Devices设备列表中,找到你所在的设备,点击你想要监控的进程。
- 2.点击“Update Heap”按钮更新堆内存的情况。
- 3.点击“Heap”视图,查看内存的情况。
- 4.每次在Activity的退出和进入的时候点击“Cause GC”,手动调用GC释放应用的内存。
-
5.观察data oject那一行,每一次点击“Casue GC”的时候,观察Total Size的值,如果该值不断增加,则说明该应用程序存在“内存泄漏”。
我们先模拟一下内存泄漏,然后通过Heap工具来判断一下是否存在内存泄漏。
上一段存在内存泄漏的代码:public class LeakAty extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.aty_leak); testLeak(); } /** * 测试内存泄漏的代码 */ private void testLeak() { new Thread(new Runnable() { @Override public void run() { while (true) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }).start(); }











