Android内存泄漏的原因及解决方案

最近在排查内存泄漏的问题,所以想总结一下内存泄漏的原因以及解决方案。

1、单例 在getInstance的时候传入Activity的this or context 会导致泄漏

解决: 使用Application的context

2、静态变量 例如Static Activities Static Views等

解决:在activity销毁时置空

3、 集合中的对象 ArrayList<> HashMap<>等

解决:在activity销毁时置空 

4、动画

解决:在activity销毁时销毁

5、非静态内部类 handler  theard  AsyncTask

解决:静态内部类+弱应用的方式

6、未取消注册或回调  广播  Sensor Manager

通过Context.getSystemService(int name)获取的系统服务,注册监听器后,这会导致服务持有了Context的引用,如果在Activity销毁的时候没有注销这些监听器,会导致内存泄漏。

7、Timer和TimerTask

解决:Activity销毁的时候要立即cancel掉Timer和TimerTask

8、资源未关闭或释放  IO、File流或者Sqlite、Cursor等

解决:用完立即释放

9、WebView

Activity销毁后在先将WebView从父容器中移除,然后再调用它的destory()方法销毁它。

参考资料:

Android内存泄漏的八种可能(上)

Android防止内存泄漏的八种方法(下)

Android内存优化——常见内存泄露及优化方案

你可能感兴趣的:(Android内存泄漏的原因及解决方案)