美文网首页
Android - 常见内存泄漏

Android - 常见内存泄漏

作者: ADMAS | 来源:发表于2019-04-10 11:03 被阅读0次

单例

单例静态对象持有activity引用,且因静态对象生命周期比activity还长,当act被销毁时,单例中的activity无法回收,造成内存泄漏

解决方法:

传入的context使用 applicationContext进行重新赋值,application的生命周期与单例一样长

匿名内部类

原因:匿名内部类持有外部类引用

  • handler
    创建匿名内部类handler,持有外部activity的引用,activity退出时,handler内部looper还在处理MessageQueue的消息,msg持有handler的引用,handler又持有activity的引用,造成内存泄漏

    解决方法:

    建立静态的handler类,类内部可以创建activity的弱引用(静态内部类只能访问外部静态成员,因此便不会持有外部的act引用)

  • 线程
    new thread() 以及new Runnable() ,退出activity后,当子线程操作尚未完成时,会导致内存泄漏

    解决方法:

    创建静态的内部类

非静态内部类

非静态内部类持有外部act引用,静态实例生命周期和应用一样长,act无法回收

解决方法:

使用静态内部类

static 修饰的成员变量

如果成员变量被声明为 static,其生命周期将与整个app进程生命周期一样。如果此变量持有activity的引用,则activity得不到释放

Stream未关闭

在调用了流之后,一定要记得关闭流。用到流的地方一般都是文件操作,虚拟机无法通过垃圾回收来释放这些资源。

使用资源没有及时释放

  • brocastReceiver
  • cursor
  • bitmap
  • BrocastReceiver
  • file
  • contentProvider
  • Cursor
  • stream

解决方法:

退出activity时,及时释放

常用的检测内存泄漏的工具

Leakcanary: Square 公司开源的「Android 和 Java 的内存泄漏检测库」

相关文章

  • Android内存泄漏检测和定位

    建议阅读Android常见内存泄漏这篇文章,本文的例子来源于文章中的内存泄漏典型例子 内存泄漏检测工具 Profi...

  • Android内存泄漏原因及解决的总结

    分三步说明Android内存泄漏的原因及解决,“内存泄漏与内存溢出的区别”,“引用方式”,“常见引发原因与解决方案...

  • 带你学开源项目:LeakCanary-如何检测 Activity

    OOM 是 Android 开发中常见的问题,而内存泄漏往往是罪魁祸首。为了简单方便的检测内存泄漏,Square ...

  • Android-推荐一个检测内存泄漏的库(LeakCanary)

    在Android开发当中,内存泄漏是会影响用户体验的。LeakCanary开源库是一个常见的定位内存泄漏的开源库,...

  • 科普 - 收藏集 - 掘金

    5 个 Android 开发中比较常见的内存泄漏问题及解决办法 - Android - 掘金在Android开发中...

  • Android 优化

    Android 内存优化内存溢出 , 内存泄漏 , 内存泄漏过多就导致内存溢出 Android 系统垃圾回收机制内...

  • Android 常见内存泄漏

    构造单例的时候尽量别用Activity的引用; 静态引用时注意应用对象的置空或者少用静态引用; 使用静态内部类+软...

  • Android 常见内存泄漏

    一、单例造成的内存泄漏Android的单例模式非常受开发者的喜爱,不过使用的不恰当的话也会造成内存泄漏。因为单例的...

  • Android - 常见内存泄漏

    单例 单例静态对象持有activity引用,且因静态对象生命周期比activity还长,当act被销毁时,单例中的...

  • Android常见内存泄漏

    内存泄漏场景: 静态变量引用非静态内部类/匿名类实例。子线程相关的非静态内部类/匿名内部类引用。Handler导致...

网友评论

      本文标题:Android - 常见内存泄漏

      本文链接:https://www.haomeiwen.com/subject/tydzbqtx.html