前言
如果在内存泄漏发生后再去找原因并修复会增加开发的成本,最好在编写代码时就能够很好地考虑内存问题,写出更高质量的代码,这里列出一些常见的内存泄漏场景,在以后的开发过程中需要避免这类问题。
场景
-
资源性对象未关闭。比如Cursor、File文件等,往往都用了一些缓冲,在不使用时,应该及时关闭它们。
-
注册对象未注销。比如事件注册后未注销,会导致观察者列表中维持着对象的引用。
-
类的静态变量持有大数据对象。
-
非静态内部类的静态实例。
-
Handler临时性内存泄漏。如果Handler是非静态的,容易导致Activity或Service不会被回收。
-
容器中的对象没清理造成的内存泄漏。
-
WebView。WebView存在着内存泄漏的问题,在应用中只要使用一次WebView,内存就不会被释放掉。
监控
除此之外,内存泄漏可监控,常见的就是用LeakCanary第三方库,这是一个检测内存泄漏的开源库,使用非常简单,可以在发生内存泄漏时告警,并且生成leak tarce分析泄漏位置,同时可以提供Dump文件进行分析。
网友评论