Android一般什么情况下会导致内存泄漏

资料参考:https://blog.csdn.net/u011479990/article/details/78480091  

内存泄漏的原因在于生命周期长的对象持有了生命周期短的对象的引用


内存泄漏形象的比喻是"操作系统可提供给所有进程的存储空间正在被某个进程榨干",最终结果是程序运行时间越长,占用存储空间越来越多,最终用尽全部存储空间,整个系统崩溃。所以"内存泄漏"是从操作系统的角度来看的。这里的存储空间并不是指物理内存,而是指虚拟内存大小,这个虚拟内存大小取决于磁盘交换区设定的大小。由程序申请的一块内存,如果没有任何一个指针指向它,那么这块内存就泄漏

即 分配的堆内存由于某种原因程序未释放或无法释放

原文链接:https://blog.csdn.net/qq_29699799/article/details/80173110


  1. 全局集合类强引用造成的内存泄漏(特别是 static 修饰的集合 static View view),static修饰的变量,它的生命周期是很长的。static的解决方案:1)应该尽量避免static成员变量引用资源耗费过多的实例。如Context。2)Context尽量使用ApplicationContext,因为Application的Context的生命周期比较长,引用它不会出现内训泄漏的问题。3)使用WeakReference代替context,比如可以使用WeakReference mContextRef.
  2. 接收器、监听器注册没取消造成的内存泄漏,如广播,eventsbus 他们在注册的时候会把activity的引用传过去
  3. 游标cursor没关闭,io流用完没有及时关闭,其他各种连接等
  4. 匿名内部类/非静态内部类和异步线程持有生命周期短的引用导致的内存泄漏,比如你在内部类持有外部类的引用,只要内部类的实例一直存活 ,这个引用就不会被回收/AsyncTask在执行完成之后也不会自动销毁可以使用RXJAVA代替
  5. 在用到一些大对象比如Bitmap啊什么的,要记得回收
原文地址:https://www.cnblogs.com/yjpjy/p/11388897.html