最近在排查内存泄漏的问题,所以想总结一下内存泄漏的原因以及解决方案。
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()方法销毁它。
参考资料:
网友评论