借鉴自https://www.jianshu.com/p/ac00e370f83d
一般内存泄漏(traditional memory leak)的原因是:由忘记释放分配的内存导致的。(Cursor忘记关闭等)
逻辑内存泄漏(logical memory leak)的原因是:当应用不再需要这个对象,当仍未释放该对象的所有引用。
如果持有对象的引用,垃圾回收器是无法回收这个对象的。但是并不是说,引用被别人持有了,就是内存泄漏了。比如activity,你在用,那就不叫内存的泄漏,内存该花还是得花。但是当用户跳转到别的activity了,销毁了之前的activity,这个时候,如果之前那个activity的资源还没有被释放这就说不过去了。最典型的原因是之前的activity的实例依然被另外的对象持有着。有些显示的引用还好说,隐式的如内部类的引用,可就真的难以查出来了。
最典型的,静态activity
private Activity activity = null; public void setActivity(Activity activity) {