美文网首页Android实习
(第05天)Handler使用可能导致内存泄漏

(第05天)Handler使用可能导致内存泄漏

作者: cogear | 来源:发表于2018-04-28 17:09 被阅读0次
  1. 非静态内部类和匿名内部类都会保留外部类的引用。
  2. 这个引用是强引用,引用在,JVM就不会回收。
  3. 我们经常会在类内声明自己的Handler类并创建对象。
  4. 当我们发送消息到消息队列时,实际消息包含了handler对象的引用
  5. 因为第1条,handler包含外部类的引用。
  6. 当使用sendMessageDelayed()方法时,消息在消息队列中,包含handler和外部类的引用,此时外部类就不能被回收,导致内存泄漏。

解决办法

  1. 将内部类Handler和匿名内部类都设置为static
  2. 在静态Handler类中使用弱引用
    1&&2,并非1||2

一个月后回头看,发现自己也看不懂了。。所以附加几条

  • 第1条是默认的。保留对外部类的引用,更准确地说是持有外部类对象的引用?
  • 第3、4条,当发送消息时,消息中包含Handler的引用。
  • loop中有延迟的消息时,该消息包含Handler,又因为第1条,Handler也包含外部类对象的引用,导致外部类对象不能被回收。

相关文章

  • (第05天)Handler使用可能导致内存泄漏

    非静态内部类和匿名内部类都会保留外部类的引用。 这个引用是强引用,引用在,JVM就不会回收。 我们经常会在类内声明...

  • 2018-04-18 Handler的基本用法

    1.Handler实现原理: 2.为了防止使用Handler导致内存泄漏,所以采用静态内部类MyHandler 使...

  • Handler的正确使用,防止内存泄漏

    如果Handler使用不当,会导致内存泄漏,直至内存溢出。因此,为了避免这种情况的发生,Handler要定义为st...

  • Android内存优化之内存泄漏

    内存泄漏 内存泄漏一般有以下几种情况:单例、静态变量、Handler、匿名内部类、资源使用未关闭 单例导致的内存泄...

  • Android代码优化之Handler内存泄漏

    目录 前言 Android代码中涉及进程间通信的地方经常会使用Handler。 而上面这种用法可能会导致内存泄漏,...

  • 内存泄漏的场景及解决办法

    内存泄漏场景,以及开发过程如何避免内存泄漏。 判断 A引用B,A的生命周期长于B。 Handler导致内存泄漏:H...

  • Android - Handler导致的内存泄漏

    内存泄漏:没有用的对象,无法被GC垃圾回收,就会造成内存泄漏(OOM) Handler如果使用不当,极大可能造成内...

  • java基础

    Handler怎样防止内存泄漏 handler引起内存泄漏的原因:由于handler的写法问题,如果handler...

  • Handler内存泄漏的原因是什么?

    Handler内存泄漏的原因是什么? 这里提醒我们,这个handler必须时静态的,否则有可能会产生内存泄漏,所有...

  • Handler

    一,什么是handler 二,handler的使用 三,handler机制原理 四,handler引起的内存泄漏和...

网友评论

    本文标题:(第05天)Handler使用可能导致内存泄漏

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