源码原理知识点

使用WeakReference来解决Handler带来的内存泄漏

2019-12-03  本文已影响0人  wervy

    我们在项目项目中使用Handler是为了更新ui,我们在主线程中创建Handler对象,在子线程中处理一些耗时操作,handler通过发送message或者post(runnable)的方式,让主线程更新ui。

    因为子线程中是一个耗时操作,比如在访问网络请求的过程中,我把该Activity关闭了,但是这时候Handler仍然存有该该页面的引用。这样就导致该activity无法被回收,就会造成内存泄漏。

解决方法之一就是把Handler改成持有该Activity的弱引用,并把类声明为static,静态类不持有外部类的对象,所以你的Activity可以随意被回收

代码如下:

我们进入WeakReference的源码,看看WeakReference的描述信息

翻译过来也就是弱引用不会阻止引用对象被终止或是回收

还有我们在MVP的架构项目中,在P成也会用到WeakReference,实例如下

上一篇下一篇

猜你喜欢

热点阅读