Android--Handler的内存泄漏原因及解决方法
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/79024700 一、如何造成内存泄漏: 1、主线程的Looper对象会伴随该应用程序的整个生命周期 2、Java里,非静态内部类和匿名类都会潜在引用它们所属的外部类 发送的延迟空消息(EmptyMessageDelayed)后、消息处理被前,该消息会一直保存在主线程的消息队列里持续时间,在持续时间里,该消息内部持有对handler的引用,由于handler属于非静态内部类,所以又持有对其外部类(即MainActivity实例)的潜在引用,引用关系如下图 这条引用关系会一直保持直到消息得到处理,从而,这阻止了MainActivity被垃圾回收器(GC)回收,同时造成应用程序的内存泄漏,如下图: 二、解决方法 1、使用静态内部类+弱引用 在Java里,非静态内部类和匿名类都会潜在的引用它们所属的外部类。但是,静态内部类不会。所以,避免内存泄漏的解决方案是:只需要将Handler的子类设置成静态内部类;同时,还可以加上使用WeakReference...
