6.15 Memory Analysis Tool(MAT)

MAT工具是一个检测内存泄漏的利器,在Eclipse时代,MAT是Eclipse的一个插件。在Android Studio时代,开发者可以下载独立的MAT工具进行内存分析,下载地址如下所示:

https://eclipse.org/mat/

独立的MAT工具如图6.63所示。

6.15 Memory Analysis Tool(MAT) - 图1 图6.63 MAT主界面

另外,还需要准备一段带有内存泄漏的代码,如下所示。

  1. public class MainActivity extends AppCompatActivity {
  2.  
  3. private TextView mTv;
  4.  
  5. @Override
  6. protected void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. setContentView(R.layout.activity_main);
  9. LeakThread leakThread = new LeakThread();
  10. leakThread.start();
  11. }
  12.  
  13. private class LeakThread extends Thread {
  14.  
  15. @Override
  16. public void run() {
  17. super.run();
  18. try {
  19. Log.d("xys", "Leak!");
  20. // 模拟耗时操作
  21. Thread.sleep(5000 * 3000);
  22. } catch (InterruptedException e) {
  23. e.printStackTrace();
  24. }
  25. }
  26. }
  27. }

这段内存泄漏的代码非常常见,即内部类hold住了Activity的引用而导致Activity无法被释放。