面试中内存泄露的原因及解决方案是经常被问到的点,下面直接给大家罗列一下原因及解决方案,临阵磨枪哈哈。

原因:

1.单例引用Activity的Context导致内存泄露

2.静态变量导致内存泄漏

3.非静态内部类导致内存泄露

4.未取消注册或回调导致内存泄露

5.Timer和TimerTask导致内存泄露

6.集合中的对象未清理造成内存泄露

7.资源未关闭或释放导致内存泄露

8.属性动画造成内存泄露

9.WebView造成内存泄露

解决方案:

1.构造单例的时候尽量别用Activity的引用;

2.静态引用时注意应用对象的置空或者少用静态引用;

3.使用静态内部类+弱引用代替非静态内部类;

4.及时取消广播或者观察者注册;

5.耗时任务、属性动画在Activity销毁时记得cancel;

6.文件流、Cursor等资源及时关闭;

7.Activity销毁时WebView的移除和销毁。

内存泄露检测工具:

  • DDMS

  • LeakCanary

  • haha/shark

  • Android Profile

  • MAT

  • Jhat

  • dumpsys meminfo

  • APT

  • LeakInspector

  • Chrome Devtool

  • GC Log

以上工具中,常用的应该前面几个,后面的了解即可。

推荐一本Android进阶书籍,非常值得仔细反复的看